所以我知道这是一种解决方法,可能有更好的方法来做到这一点,但事情就是这样。我从收集这些信息的地方简化了代码,并只给出了可靠的值。
curSel = nuke.selectedNodes()
knobToChange = "label"
codeIn = "[value in]"
kcPrefix = "x"
kcStart = "['"
kcEnd = "']"
changerString = kcPrefix+kcStart+knobToChange+kcEnd
for x in curSel:
changerString.setValue(codeIn)
但我得到了我想我会的错误 - 这是一个字符串没有属性“setValue”
因为如果我只键入 x['label'] 而不是 changerString,它就可以工作,但即使 changer string 说的是完全相同的东西,它也会被读取为字符串而不是代码。
有什么想法吗?
最佳答案
看起来您正在寻找一些东西来根据您当前的命名空间将字符串评估为 python 对象。一种方法是使用 globals
字典:
globals()['x']['label'].setValue(...)
换句话说,globals()['x']['label']
与 x['label']
是一样的。
或者为您的情况明确说明:
globals()[kcPrefix][knobToChange].setValue(codeIn)
其他人可能会建议 eval
:
eval('x["label"]').setValue(...) #insecure and inefficient
但是 globals
绝对是一个更好的主意。
最后,通常当你想做这样的事情时,你最好首先使用字典或其他某种数据结构来让你的数据更有条理
关于Python - 在 for in 语句中使用字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14199484/