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
>>>