gpt4 book ai didi

python - 捕获内置异常(而不是自定义异常)

转载 作者:太空宇宙 更新时间:2023-11-04 08:51:15 27 4
gpt4 key购买 nike

我想修补一个库来捕获内置的 ConnectionError (继承自 OSError)。

到目前为止一切顺利。碰巧的是,该库有一个“自定义”异常,也称为 ConnectionError:

class LibraryError(Exception):
pass


class ConnectionError(LibraryError):
pass

我想,如果我现在 try catch ConnectionError,做类似的事情

try:
do_something()
except ConnectionError as e:
try_to_get_it_right_again()

我只会捕获自定义的 ConnectionError,它继承自 LibraryError。 (免责声明:我必须承认,我自己还没有测试过,因为我不知道怎么做)。

如何让 Python 捕获内置的 ConnectionError

最佳答案

使用 builtins module,命名空间的显式名称,其中存在诸如 intConnectionError 之类的内置名称。

import builtins

try:
...
except builtins.ConnectionError:
...

在 Python 2 中,这将是 __builtin__,尽管 Python 2 没有 ConnectionError。请注意,__builtins__ 本身就是个奇怪的东西;即使它看起来像您想要的,但实际上并非如此。


如果你想要在 Python 2 和 Python 3 中都工作的代码......好吧,异常层次结构在 Python 2 中看起来很不一样,而且 ConnectionError 甚至不存在,所以它不像决定是否使用 builtins__builtin__builtins/__builtin__ 至少很容易解决。

要根据 Python 版本导入正确的模块,您可以捕获 ImportError 并导入另一个模块:

try:
import builtins
except ImportError:
import __builtin__ as builtins

暂时假设 Python 2 有 ConnectionError,您可以在隐藏名称之前保存对内置 ConnectionError 的引用:

_builtin_ConnectionError = ConnectionError

class ConnectionError(LibraryError):
...

关于python - 捕获内置异常(而不是自定义异常),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34954477/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com