gpt4 book ai didi

python - 如何将未知的局部变量获取到其他命名空间

转载 作者:太空宇宙 更新时间:2023-11-04 05:45:35 24 4
gpt4 key购买 nike

我想读取一些输入,其中包含类似以下字符串的 python 赋值语句:

"VARIABLE = 'something' + OTHER_VAR"

所以我使用其中之一:

exec("VARIABLE = 'something' + OTHER_VAR")
exec("VARIABLE = 'something' + OTHER_VAR", globals(), locals())

我想在其他代码中使用这个变量,但在 exec(...) 之后它不在当前命名空间中。可以这样获取变量值:

locals()['VARIABLE']

但是,如果我不知道变量的名称,这对我来说不是解决方案。

那么如何将新变量放入我的命名空间中呢?

更新:我的 exec 数据是这样的:

COMPBLOCK =  StringLeft(MyPlatform.HierarchicalName,6) +"_IADI." + CMP + "." + BLOCK ;
SetCustomPropertyValue("DEVLM2",COMPBLOCK + ".DEVLM2",false);
SetCustomPropertyValue("CRIT",COMPBLOCK + ".CRIT",false);
SetCustomPropertyValue("UNACK",COMPBLOCK + ".UNACK",false);
SetCustomPropertyValue("ALMSTA_26",COMPBLOCK + ".ALMSTA#B26",false);

我定义了函数 SetCustomPropertyValueStringLeft。我想避免使用所有可能的输入将此脚本复杂地转换为 python。 Exec() 似乎是非常快速的解决方案,但在阅读之后 this post - Modifying locals in python我有点卡住了。

最佳答案

  1. 请注意有关从外部源执行任意代码有多危险的警告警告。
  2. 如果语句具有一致的格式,例如像示例中的那样,您可以轻松地解析它并提取变量名:

    varname = stmt.split('=')[0].strip()

    或使用正则表达式的更复杂的东西

  3. 如果语句总是只引入一个新变量,您可以比较执行前后的 locals() 并检查添加了哪个新变量:

    old_locals = set(locals().keys())
    exec(stmt)
    new_locals = set(locals().keys())
    varname = (new_locals-old_locals).pop()

关于python - 如何将未知的局部变量获取到其他命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32457274/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com