list() 给出 TypeError:'Node'对象不可调用 - 但仅在一些代码之后



我希望这对你们来说很容易。

这是我的剧本,为Nuke。

selNodes = nuke.selectedNodes()
for list in selNodes:
    if list.Class() == 'Read':
        layerArray = []
        # Get the list of layers and make unique using set
        for chanList in list.channels():
            channelLayer = chanList.split('.')
            layerArray.append(channelLayer[0])
        print list(set(layerArray))

它给出一个错误:

Traceback (most recent call last):
  File "<string>", line 11, in <module>
TypeError: 'Node' object is not callable

所以我尝试了一个相同性质的更简单的代码:

a = [1, 1]
print list(set(a))

它没有用。相同的错误消息。现在奇怪的事情是:我打开了一个新的Nuke并再次运行了更简单的代码,它起作用了。我不明白为什么,但我很高兴。所以我输入了我的原始代码并运行了它,错误消息。我删除了它们,编辑器现在很干净。并再次运行更简单的代码,错误消息!!

这意味着在我粘贴和删除其他内容后,工作代码可能会失败!

谁能阐明这个问题?Nuke是一个非常成熟的软件,我不知道它是否是一个软件错误。

这是因为,您将list用作循环变量,这会隐藏内置函数list。您正在 中使用该功能

print list(set(layerArray))

即使循环结束,循环变量也会泄漏,请检查此程序以更好地理解

for i in range(10):
    pass
print(i)

这将打印9 。这意味着,即使在循环结束后,i在程序中仍然可用。在程序中的情况中,在迭代selNodes 之后,list变量具有最后一个变量。当你说

print list(set(layerArray))

这就是它失败的原因。有两种方法可以解决此问题。

  1. 只需将循环变量更改为其他变量即可。

  2. 循环结束时使用del list假装我没有建议这个。建议这样做。只需将循环变量更改为其他变量即可。

相关内容

最新更新