【发布时间】:2010-10-01 22:35:16
【问题描述】:
Python documentation 的 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
>>>
【问题讨论】:
标签: python exception exception-handling types isinstance