Python使用exec执行外部脚本传参报NameError如何解决
核心问题原因
你对exec方法的传参逻辑理解有误。exec的第二个参数是指定执行目标代码时使用的全局命名空间字典,该字典的键就是目标代码(即prova.py)可以直接访问的全局变量名,值为对应的变量内容。
你当前的写法是把构造好的var字典本身直接作为全局命名空间传入,而这个字典是通过enumerate生成的,键都是整数索引,不存在名为var的键,因此prova.py运行时找不到var变量,抛出NameError。
解决方法
你需要构造一个新的全局命名空间字典,把要传递的var按「变量名: 变量值」的格式存入其中,再传给exec即可,示例代码如下:
# 构造需要传递的var变量 var = {key:val for key, val in enumerate(lista_gp_todict)} # 构造exec使用的全局命名空间 exec_globals = {"var": var} # 传入命名空间执行prova.py exec(open("prova.py").read(), exec_globals)
如果需要同时让prova.py可以访问当前try.py里的其他全局变量,可以合并当前全局字典:
exec_globals = globals() | {"var": var}
内容的提问来源于stack exchange,提问作者Dark2018
相关产品推荐
相关产品推荐

