的Python documentation爲except
說:爲什麼Python的`except`使用`isinstance`?
對於除了與 表達子句表達被 評價,該子句 異常,如果結果對象是 「兼容」與異常匹配。一個 對象是一個例外 如果它是類或基類異常對象的,[...]
爲什麼不except
使用isinstance
,而不是比較基類兼容?這阻止了使用__instancecheck__
覆蓋實例檢查。
編輯:
我可以理解,這是不存在的原因之一是,沒有人認爲它。但是,有什麼理由不實施?
編輯:
在Python 3.2a的SSH會話顯示,嘗試使用__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代碼」*。我想我可以給予「同意的成年人」的答案 - 如果有人想在自己的異常處理中檢查自定義實例,爲什麼不讓他? – 2010-10-01 22:46:15