如何非递归地捕获ImportError?

时间:2013-12-08 21:13:25

标签: python importerror

假设我们要导入名为user.py的脚本,该脚本可能会失败。

try:
   import user
except ImportError:
   logging.info('No user script loaded.')

我们如何确保仅捕获user.py本身可能的导入失败,而不是user.py中可能包含的导入?

2 个答案:

答案 0 :(得分:1)

您可以查看参数:

try:
   import user
except ImportError as exception:
    if 'user' == exception.args[0][16:]:
        logging.info('No user script loaded.')

这可确保您只在用户脚本导入失败时才记录该消息。

虽然可以说未能导入user中的一个导入也意味着它无法导入user(这意味着您无论如何都需要记录该消息)。

答案 1 :(得分:1)

您可以检查当前回溯是否是回溯链的一部分:

import sys

try:
    import user
except ImportError:
    if sys.exc_info()[2].tb_next:
        raise

    logging.info('No user script loaded.')

如果ImportError中有user,则sys.exc_info()[2].tb_next会指向它。