Ram*_*hum 8 python types exception-handling exception isinstance
在Python文档的except说:
对于带有表达式的except子句,将计算该表达式,如果结果对象与异常"兼容",则子句匹配该异常.如果对象是异常对象的类或基类,则该对象与异常兼容,[...]
为什么不except使用isinstance而不是比较基类?这样可以防止使用__instancecheck__覆盖实例检查.
编辑:
我可以理解,这不存在的原因之一是没有人考虑过它.但有什么理由不应该实施吗?
编辑:
Python 3.2a中的Shell会话显示尝试使用__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
>>>
Run Code Online (Sandbox Code Playgroud)
简单的答案可能是没有人考虑过。一个更复杂的答案是没有人考虑它,因为很难做到这一点,因为这意味着在处理异常时执行潜在的任意Python代码,并且它的价值值得怀疑。Python 中的异常类通常是非常简单的类,用功能重载它们通常是一个错误。很难想象有什么理由让它进行咨询__instancecheck__。如果您有这样的情况(无论是否有补丁),请提交错误,有人可能会发现它。