1

我希望这对你们来说是一件容易的事。

这是我的脚本,用于 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 是一个非常成熟的软件,我不知道它是否是软件错误。

4

1 回答 1

2

这是因为,您使用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循环结束时使用。假装我没有建议这个。建议这样做。只需将循环变量更改为其他内容。

于 2013-12-26T02:22:55.810 回答