2013-03-05 75 views
0

基本上我现在想要做的是在Nuke中使用python设置一个脚本,该脚本将用户选择的节点添加到他们并为他们添加一个简单的合成工作流的shuffle节点。不过,我坚持让Nuke将洗牌添加到选定的节点上。它在选中时在1个节点上工作,但如果选择了多个节点,则它只能在所选的第一个节点上工作。 我问朋友这件事,她说去尝试while循环,所以这是的代码如下:Nuke中的Python:除了StopIteration

while True: 
    if n in nuke.selectedNodes(): 
     name = n.name() 
     node = nuke.toNode(name) 
     blue.setInput(0,node) 
     green.setInput(0,node) 
     red.setInput(0,node) 
    except StopIteration : 
     break 

这一切运作良好,直到除了部分。我已经运行脚本,而没有除外,它冻结了Nuke,显示它无限运行,但我需要它停止。 Nuke告诉我除了是一个无效的语法。有谁知道我可以如何解决这个问题,或者为我的流程创建更好的解决方案?

+0

那不行。它在那里更好地观看它,但那不是问题。 – 2013-03-05 23:47:08

+0

StopIteration异常是[Python迭代器协议](http://docs.python.org/2/library/stdtypes.html#iterator-types)的一部分。当你在一个没有更多值的迭代器上调用next时会引发这个问题。我对Nuke完全一无所知,所以你能说出你期望提出这种异常的函数调用吗?看起来没有什么明显的,看着代码。 – Blckknght 2013-03-06 01:32:07

回答

0

正确的语法捕捉异常的名称<exception_name>是:

try: 
    #code here... 
except <exception_name>: 
    #code here... 

编辑:
它接缝你的代码也有其他问题...

+0

嗯,我刚刚试过这个,现在我的核弹正在崩溃... – 2013-03-05 23:57:55

+0

不,现在没关系。它只是告诉我,n是未定义的... – 2013-03-06 00:00:01

+0

我只是试图通过在while语句之前使n = nuke.selectedNodes()来定义n,现在它正在崩溃。 – 2013-03-06 00:11:41

1

也许你应该考虑一下你在做什么,而不是仅仅在语法上抛出问题并希望它消失。如果没有try块,则except没有意义,并且您没有在任何地方分配到n。想必你的意思是这样的:

for n in nuke.selectedNodes(): 
    name = n.name() 
    node = nuke.toNode(name) 
    blue.setInput(0,node) 
    green.setInput(0,node) 
    red.setInput(0,node) 

没有必要赶StopIteration如果你使用这样的迭代器。