2

我想做的是扩展基本ImportError异常,所以每当它被调用时,它也会做其他事情

import logging

logging.basicConfig(filename="logs", level=logging.DEBUG)

class ImportError(Exception):

    def __init__(self, message):
        Exception.__init__(self)
        self.message = message

        logging.warning(self.message)



import module

但这不起作用,有人可以告诉我我们怎样才能实现这样的目标..

谢谢。

4

1 回答 1

3

ImportError是一个内置异常;导入失败不会在当前模块全局变量中查找异常。

事实上,在 Python 2 中,导入机制甚至不会在内置函数中查找它。它使用异常的C 等效PyExc_ImportError项, . 您不能用自己的异常替换。

只需在 python 主脚本的顶层捕获异常:

try:
    main()  # or whatever function is your main entrypoint
except ImportError:
    logging.exception('Import oopsie')

或改为在异常处理程序中引发自定义异常。这对于你的代码的未来维护者来说比将附加功能侵入标准异常中要清楚得多

在 Python 3.1 及更高版本中,导入机制已在很大程度上使用更多 Python 代码重新实现,您可以通过使用builtins模块并分配 to来做到这一点builtins.ImportError,但我强烈建议不要使用这种黑客行为。如果您确实ImportError走这条路线name,请注意path除了message.

于 2013-09-06T09:36:31.113 回答