gpt4 book ai didi

python - 为什么 Python 的 `except` 不使用 `isinstance` ?

转载 作者:太空狗 更新时间:2023-10-29 21:07:49 25 4
gpt4 key购买 nike

Python documentation对于 except 说:

For an except clause with an expression, that expression is evaluated, and the clause matches the exception if the resulting object is “compatible” with the exception. An object is compatible with an exception if it is the class or a base class of the exception object, [...]

为什么 except 不使用 isinstance 而不是比较基类?这会阻止使用 __instancecheck__ 来覆盖实例检查。

编辑:

我能理解这不存在的原因之一是没有人考虑过它。但是有什么理由不应该实现这个吗?

编辑:

Python 3.2a 的 Shell session 表明尝试使用 __subclasscheck__ 是行不通的:

>>> class MyType(type): __subclasscheck__ = lambda cls, other_cls: True
>>> class O(Exception, metaclass=MyType): pass
>>> issubclass(3, O)
0: True
>>> issubclass(int, O)
1: True
>>> try:
... 1/0
... except O:
... print('Success')
Traceback (most recent call last):
File "<pyshell#4>", line 2, in <module>
1/0
ZeroDivisionError: division by zero
>>>

最佳答案

简单的答案可能是没有人考虑过它。一个更复杂的答案是没有人考虑它,因为很难做到这一点,因为这意味着在处理异常时可能执行任意 Python 代码,而且它的值(value)值得怀疑。 Python 中的异常类通常是非常简单的类,用功能重载它们通常是错误的。很难想象让它查询 __instancecheck__ 的情况。如果您有这样的情况(有或没有补丁),请提交错误,有人可能会发现它。

关于python - 为什么 Python 的 `except` 不使用 `isinstance` ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3843469/

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