Python如何跨独立py文件访问其他文件内定义的字典变量
报错原因
exec()执行外部代码时默认使用独立的局部作用域,names.py里定义的names变量不会落到当前运行脚本的可访问作用域内,因此触发变量不存在的报错。同时直接用exec()读取执行外部py文件本身就不是Python跨文件复用代码的标准方案,容易出作用域问题,也存在安全隐患。
正确实现方案(保留两个独立文件)
Python原生支持同目录下的模块导入机制,不需要用exec()就能跨文件访问变量,具体操作如下:
- 无需改动
names.py的原有内容,保持文件独立即可,原文件代码如下:
names = {} names['males']=[ "Bob", "Will", "John" ] names['female']=[ "Anna", "Lindsay", "Nicole", ]
- 修改
income.py的代码,通过标准导入语法引入names.py里的变量,有两种常用写法:
第一种是直接导入整个模块:
第二种是直接导入目标变量,写法更简洁:import names print(names.names["males"])from names import names print(names["males"])
修改完成后运行income.py,即可正常输出['Bob', 'Will', 'John'],不会再触发变量不存在的报错。
特殊说明:如果一定要用
exec()实现(极度不推荐,仅作原理演示),需要手动指定执行作用域为当前全局作用域,写法为exec(open("names.py").read(), globals())。这种写法会污染当前脚本的命名空间,还存在任意代码执行风险,正式场景禁止使用。
内容的提问来源于stack exchange,提问作者Diogo Miranda
相关产品推荐
相关产品推荐

