使用importlib.import_module导入模块报错:'CURIE_BLR'不是包求助
问题排查:ModuleNotFoundError 导入模块失败
执行命令 python update_topo_status.py --data_file CURIE_BLR.py 时触发错误:
ModuleNotFoundError: No module named 'CURIE_BLR.py'; 'CURIE_BLR' is not a package
涉及代码
update.py
import argparse # 注意:原代码遗漏importlib导入,属于潜在问题 parser = argparse.ArgumentParser() parser.add_argument("--data_file") job_args = parser.parse_known_args()[0] imported = importlib.import_module(job_args.data_file)
CURIE_BLR.py
testbed = "CURIE_BLR" sockets = [ "10.64.127.135:2005:Fugazi", "10.64.127.135:2006:Radium", "10.64.127.135:2007:Thallium", "10.64.127.135:2008:Thorium", "10.64.127.135:2009:Uranium", "10.64.127.135:2011:Neptune", "10.64.127.135:2033:Promethium" ]
错误原因
- 模块名格式错误:
importlib.import_module()要求传入的是不带.py后缀的模块名,但你传入的是CURIE_BLR.py,Python会将整个字符串当作模块名查找,因此找不到对应模块。 - 导入语句遗漏:原
update.py未导入importlib模块,执行时还会触发NameError: name 'importlib' is not defined错误。
解决方法
方法一:修改命令行参数(推荐)
执行命令时去掉.py后缀:
python update_topo_status.py --data_file CURIE_BLR
方法二:代码内自动处理后缀(更健壮)
如果希望支持用户带.py后缀输入,在update.py中添加后缀处理逻辑:
import argparse import importlib parser = argparse.ArgumentParser() parser.add_argument("--data_file") job_args = parser.parse_known_args()[0] # 自动去除文件的.py后缀 module_name = job_args.data_file.rstrip('.py') imported = importlib.import_module(module_name)
额外修复:补全importlib导入
确保update.py开头导入importlib,避免触发额外的NameError。
内容的提问来源于stack exchange,提问作者Akshay J
相关产品推荐
相关产品推荐

