Warum benutzt Python 'except' nicht 'isinstance'?

8

Die Python-Dokumentation für except lautet:

  

Für eine Ausnahmeklausel mit einem   Ausdruck, dieser Ausdruck ist   ausgewertet, und die Klausel entspricht der   Ausnahme, wenn das resultierende Objekt ist   "Kompatibel" mit Ausnahme. Ein   Objekt ist mit einer Ausnahme kompatibel   Wenn die Klasse oder eine Basisklasse des Ausnahmeobjekts ist , [...]

Warum verwendet except isinstance nicht, um Basisklassen zu vergleichen? Dies verhindert die Verwendung von __instancecheck__ zum Überschreiben der Instanzprüfung.

BEARBEITEN:

Ich kann verstehen, dass einer der Gründe dafür nicht existiert, dass niemand darüber nachgedacht hat. Aber gibt es Gründe, warum dies nicht umgesetzt werden sollte?

BEARBEITEN:

Shell-Sitzung von Python 3.2a zeigt, dass die Verwendung von __subclasscheck__ nicht funktioniert:

%Vor%     
Ram Rachum 01.10.2010, 22:35
quelle

2 Antworten

3

Die einfache Antwort ist wahrscheinlich, dass niemand darüber nachgedacht hat. Eine komplexere Antwort wäre, dass niemand darüber nachgedacht hat, weil es schwierig ist, dies richtig zu machen, weil dies die Ausführung von potenziell beliebigem Python-Code während der Behandlung einer Ausnahme bedeuten würde und dass es von zweifelhaftem Wert ist. Ausnahmeklassen in Python sind in der Regel sehr einfache Klassen, deren Überladung oft mit Fehlern behaftet ist. Es ist schwer vorstellbar, dass man sich mit __instancecheck__ beraten lässt. Wenn du einen solchen Fall hast (mit oder ohne Patch), füge einen Fehler ein und jemand könnte ihn aufheben.

    
Thomas Wouters 01.10.2010, 22:42
quelle
1
  

Aber gibt es Gründe dafür?   sollte nicht implementiert werden?

Können Sie ein Beispiel geben, wo dies nützlich wäre?

Wenn Sie dies tun:

%Vor%

Python ruft __subclasscheck__ auf SomeType 's Metaklasse auf, um zu bestimmen, ob Something eine Unterklasse von SomeType ist. Die Metaclass PEP spricht darüber ausführlicher.

>     
Jochen Ritzel 01.10.2010 23:21
quelle