我希望这对你们来说很容易。
这是我的剧本,为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是一个非常成熟的软件,我不知道它是否是一个软件错误。
答案 0 :(得分:2)
这是因为,您使用list
作为循环变量,它隐藏了内置函数list
。您正在
print list(set(layerArray))
即使循环结束,循环变量也会泄漏,请检查此程序以便更好地理解
for i in range(10):
pass
print(i)
这将打印9
。这意味着,即使在循环结束后,程序中仍然可以使用i
。迭代selNodes
,list
变量后,程序中的大小写具有最后一个变量。当你说
print list(set(layerArray))
这就是它失败的原因。有两种方法可以解决这个问题。
只需将循环变量更改为其他内容。
循环结束时使用假装我没有建议这样做。建议使用 NOT 。只需将循环变量更改为其他内容即可。del list
。