Die Referenzzustände Python Sprache in section 7.4:Warum fängt außer object alles in Python ein?
Für eine except-Klausel mit einem Ausdruck, wird dieser Ausdruck ausgewertet, und die Klausel entspricht die Ausnahme, wenn das resultierende Objekt „kompatibel“ mit der Ausnahme ist. Ein Objekt ist kompatibel mit einer Ausnahme, wenn es sich um die Klasse oder eine Basisklasse des Ausnahmeobjekts handelt, oder ein Tupel, das ein Element enthält, das mit der Ausnahme kompatibel ist.
Also, warum nicht except object:
alles fangen? object
ist die Basisklasse aller Ausnahmeklassen, daher sollte except object:
jede Ausnahme abfangen können.
Zum Beispiel sollten diese fangen die AssertionError
print isinstance(AssertionError(), object) # prints True
try:
raise AssertionError()
except object:
# This block should execute but it never does.
print 'Caught exception'
Sie benötigen eine Ausnahme dort geben zu setzen, und 'object' ist keine Ausnahme Art. Ich bin mir nicht sicher, warum das nicht einen 'TypeError' auslöst. – user2357112
Das funktioniert übrigens nur in 2.x. In 3.x wird ein TypeError ausgelöst. Meine Annahme wäre, dass es aufgrund einer fehlenden magischen Methode fehlschlägt, aber ich konnte Ihnen nicht sagen, welche (s). 'AssertionError' hat das folgende Attribut, dass' Objekt' nicht '{'__setstate__', 'args', '__context__', '__suppress_context__','__dict__ ','__cause__', 'with_traceback','__traceback__}}' hat , also nehme ich an, es liegt an einem von denen. –
Sieht aus wie ein Fehler in der 2.x-Ausnahmebehandlung. Python 3 verfügt über die richtige Prüfung, um Nicht-Ausnahme-Typen abzufangen. Python 2 macht einfach nur das Falsche. – user2357112