如何区分ImportError中的“未找到模块”和“模块抛出异常”?
在Python中,如果你写了import does_not_exist
,程序会报错,显示ImportError
,这意味着你试图导入一个不存在的模块。
import exists
比如说,如果你有一个文件叫exists.py
,
import does_not_exist
同样也会报ImportError
。
那么,我该怎么在代码中区分这两种情况呢?
2 个回答
2
你可以使用 traceback 里的 tb_next。只有当异常发生在其他模块时,它才会有值,不会是 None。
import sys
try:
import exists
except Exception, e:
print "None on exists", sys.exc_info()[2].tb_next == None
try:
import notexists
except Exception, e:
print "None on notexists", sys.exc_info()[2].tb_next == None
>>> None on exists False
>>> None on notexists True
3
我知道的唯一方法就是检查一下最顶层的模块名是否在异常信息里“存在”。
try:
import exists
except ImportError as exc:
if "exists" in str(exc):
pass
else:
raise
这会不会是对Python的ImportError的一个功能请求呢?如果有一个变量专门用来存模块名,那肯定会方便很多。