我想导入Python模块(如果存在),但如果不存在则忽略ImportError
。但是,如果导入的模块本身会引发ImportError
,则此错误也会被忽略,这不是我需要的(即模块存在,但有一些错误< / strong>,我想知道。)
for app in INSTALLED_APPS:
try:
module = __import__('{}.mycustommodule'.format(app))
# Do something with it
except ImportError:
traceback = sys.exc_info()[2]
if ( ? ): # if the exception occurred in app.mycustommodel, raise
raise
pass # otherwise, ignore
我查看了sys.exc_info和traceback的文档,但没有找到任何有用的信息。怎么办呢?
答案 0 :(得分:4)
如果在捕获它的同一函数中发生异常,则堆栈跟踪将只有一个帧。否则,它将有多个帧。在查看related questions并进行一些测试后,我发现它足以检查tb_next
是否为None
:
except ImportError:
traceback = sys.exc_info()[2]
if ( traceback.tb_next ):
raise
pass
注意:虽然tb_next
上的文档很少(在inspect
的文档中看到了对它的引用,但没有指定什么构成回溯“级别”),上面的行为在Python 2.7.3,Python 3.2.3,Jython 2.5.3,IronPython 2.7.3和PyPy 1.8.0之间是一致的。