のPythonドキュメントにexcept
は次のように書かれています:
式を含むexcept句の場合、その式が評価され、結果のオブジェクトが例外と「互換性がある」場合、句は例外と一致します。オブジェクトが例外オブジェクトのクラスまたは基本クラスである場合、オブジェクトは例外と互換性があります[...]
基本クラスを比較する代わりにexcept
使用しないのはなぜですか? isinstance
これにより、 を使用__instancecheck__
してインスタンス チェックをオーバーライドできなくなります。
編集:
これが存在しない理由の 1 つは、誰もそれを考慮していないことだと理解できます。しかし、これを実装すべきではない理由はありますか?
編集:
__subclasscheck__
これを使用しようとしても機能しないことを示す Python 3.2a からのシェル セッション:
>>> 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
>>>