如何批量检查列表中的变量是否存在于待导入的Python文件中
批量检查并导入模块中的变量
问题原因
你原来的循环代码无法工作,核心问题是from file import listElem的逻辑是导入file模块里名为listElem的变量,而非循环变量listElem中字符串对应的目标变量名(比如foo1、foo2)。无论循环到哪个元素,它都在找listElem这个不存在的变量,因此总会触发ImportError。
解决方案
方法1:导入整个模块后检查属性
这种方式直观易懂,先导入目标模块,再逐个检查并获取变量:
import file my_list = ['foo1', 'foo2'] for var_name in my_list: if hasattr(file, var_name): # 将变量绑定到当前全局命名空间,和直接导入效果一致 globals()[var_name] = getattr(file, var_name) else: globals()[var_name] = None print(f"Can't find {var_name} in file")
方法2:动态导入模块并处理
如果不想提前导入整个模块,可使用内置的__import__函数动态操作:
my_list = ['foo1', 'foo2'] # 动态导入file模块 target_module = __import__('file') for var_name in my_list: try: var_value = getattr(target_module, var_name) globals()[var_name] = var_value except AttributeError: globals()[var_name] = None print(f"Can't find {var_name} in file")
两种方法都能实现批量检查变量的需求:存在则导入到当前命名空间,不存在则设为None并给出提示。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

