aes*_*ipt 1 python string expression for-loop
所以我知道这是一个解决方法,而且这可能是一个更好的方法,但这是交易.我已经简化了代码,从那里收集这些信息,并给出了坚实的价值.
curSel = nuke.selectedNodes()
knobToChange = "label"
codeIn = "[value in]"
kcPrefix = "x"
kcStart = "['"
kcEnd = "']"
changerString = kcPrefix+kcStart+knobToChange+kcEnd
for x in curSel:
changerString.setValue(codeIn)
Run Code Online (Sandbox Code Playgroud)
但我得到错误,我想我会 - 这是一个字符串没有属性"setValue"
它因为我只是输入x ['label']而不是changerString,它可以工作,但即使更换器字符串说完全相同的东西,它被读作字符串而不是代码.
有任何想法吗?
看起来你正在寻找基于当前命名空间将字符串计算为python对象的东西.一种方法是使用globals字典:
globals()['x']['label'].setValue(...)
Run Code Online (Sandbox Code Playgroud)
换句话说,globals()['x']['label']就是一样的东西x['label'].
或者明确说明你的情况:
globals()[kcPrefix][knobToChange].setValue(codeIn)
Run Code Online (Sandbox Code Playgroud)
其他人可能建议eval:
eval('x["label"]').setValue(...) #insecure and inefficient
Run Code Online (Sandbox Code Playgroud)
但这globals绝对是一个更好的主意.
最后,通常当你想做这样的事情时,你最好先使用字典或其他类型的数据结构来保持数据更有条理