如何在ImportError上区分“模块未找到”和“模块抛出异常”?

时间:2009-12-07 14:38:21

标签: python importerror

在Python中,import does_not_exist会引发ImportError

import exists

exists.py

import does_not_exist

也会提升ImportError

我该如何区分代码?

2 个答案:

答案 0 :(得分:3)

我知道的唯一方法是检查toplevel modulename“exists”是否在Exception的消息中:

try:
  import exists
except ImportError as exc:
  if "exists" in str(exc):
     pass
  else:
     raise

这可能是Python的ImportError的功能请求吗?拥有模块名称的变量肯定会很方便..

答案 1 :(得分:2)

您可以使用回溯的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