我希望这对你们来说很容易。
这是我的剧本,为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))
这就是它失败的原因。有两种方法可以解决此问题。
只需将循环变量更改为其他变量即可。
循环结束时使用假装我没有建议这个。不建议这样做。只需将循环变量更改为其他变量即可。del list
。