2013-03-05 2 views
0

В основном я пытаюсь сделать в настоящее время скрипт в Nuke, использующий python, который выбирает узлы, выбранные пользователем, и добавляет к ним перетасованные узлы для простого технологического процесса компоновки. Однако я застрял на том, чтобы Nuke добавлял перетасовки на выбранные узлы. Он работает на 1 узел при выборе, но если выбрано несколько, он работает только с первым выбранным. я спросил друга об этом, и она сказала, чтобы попробовать время цикла, так что это код следующим образом:Python in Nuke: кроме 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

Нет, это не так. Это было для лучшего просмотра, но это не проблема. –

+0

Исключение 'StopIteration' является частью [протокола итератора Python] (http://docs.python.org/2/library/stdtypes.html#iterator-types). Он возникает, когда вы вызываете 'next' на итераторе, у которого больше нет значений. Я совершенно не осведомлен о Nuke, так что вы можете указать, какая из вызовов функций вы ожидаете поднять это исключение? Мне ничего не кажется очевидным, глядя на код. – Blckknght

ответ

0

Правильный синтаксис, чтобы поймать исключение с именем <exception_name> является:

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

EDIT:
Это швов вашего кода и другие проблемы ...

+0

Хм, я просто попробовал это, и теперь моя ядерная бомба рушится ... –

+0

Нет, теперь неважно. Он просто сказал мне, что n не определено ... –

+0

Я просто попытался определить n, сделав его n = nuke.selectedNodes() перед утверждением while, и теперь он рушится на меня. –

1

Может быть, вы должны думать о что вы делаете, а не просто бросаете синтаксис в проблему и надеетесь, что она уйдет. except не имеет смысла без блока try, и вы не назначаете 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, если вы используете итераторы, как это.

Смежные вопросы