所以这是我在论坛上的第一个问题,我希望我做得对。 一般问题:在编写允许用户根据他们想要更改的上下文或参数输入不同数据类型的值的脚本时,如何确保 python 不返回任何错误? 更具体地说:我是 python 新手,想编写一个脚本,允许 The Foundry's Nuke 的用户一次更改同一类的多个节点上的值。取决于要更改的所需参数是否是复选框('bool')和 RGBA 输入('4 floats')......输入必须是不同的类型。搜索论坛我发现可以通过type()函数检查类型并在 if 语句中与isinstance()进行比较功能。我想我可以使用它,但是例如 Gradenode 的乘法旋钮的类型返回类型“AColor_Knob”。我期待像浮动这样的东西。无论我要比较的数据类型如何,在 isinstance() 中比较它都不会给我一个匹配项。
到目前为止的主要脚本:
nukescripts.clear_selection_recursive()
userInput = nuke.getInput('Which type of nodes would you like to select? (!!!first char has to be capitalized!!!)',
'Shuffle')
matchingNodes = []
for each in nuke.allNodes():
if each.Class() == userInput:
matchingNodes.append(each)
else:
pass
for i in matchingNodes:
i.setSelected(True)
nuke.message(str(len(
matchingNodes)) + ' matching Nodes have been found and are now selected! (if 0 there either is no node of this type or misspelling caused an error!)')
userInput_2 = nuke.getInput('Which parameter of these nodes would you like to change? \n' +
'(!!!correct spelling can be found out by hovering over parameter in Properties Pane!!!)',
'postage_stamp')
userInput_3 = nuke.getInput('To what do you want to change the specified parameter? \n' +
'(allowed input depends on parameter type (e.g. string, int, boolean(True/False)))', 'True')
for item in matchingNodes:
item.knob(userInput_2).setValue(userInput_3)
到目前为止我如何检查数据类型:
selected = nuke.selectedNode()
knobsel = selected.knob('multiply')
print(type(knobsel))
#if type(knobsel) == bool:
if isinstance(knobsel, (str,bool,int,float,list)):
print('match')
else:
print('no match')