Ich frage mich, ob Sie eine (spezifische) abgefangene Ausnahme erneut auslösen können und sie von einem späteren (allgemeinen) abgefangen wird, außer im selben try-except. Als Beispiel möchte ich etwas mit einem bestimmten IOError machen, aber wenn es nicht der erwartete IOError ist, dann sollte die Ausnahme wie jeder andere Fehler behandelt werden. Was ich zunächst versucht:Python 'except' fall-through
try:
raise IOError()
except IOError as ioerr:
if ioerr.errno == errno.ENOENT:
# do something with the expected err
else:
# continue with the try-except - should be handled like any other error
raise
except Exception as ex:
# general error handling code
Allerdings funktioniert das nicht: die Erhöhung wieder wirft die Ausnahme außerhalb des Kontextes des try-except. Was wäre die pythonische Schreibweise, um das gewünschte "Fall-through" -Ausmaß zu erhalten?
(Ich bin bewusst, dass es war ein vorgeschlagener ‚bedingte Ausnahme‘, dass nicht umgesetzt wurde, was diese gelöst haben könnte)
Sie möchten also vom 'extend IOError' Block zum' except Exception' Block gehen? Soweit mir bekannt ist, ist das nicht möglich, nur ein "except" -Block (oder der "else" -Block) läuft für einen gegebenen "try". Du könntest die ganze Sache in einen anderen "Versuch" wickeln und entfernst den inneren 'except Exception', was bedeutet, dass alle außer den spezifisch behandelten 'IOError's in den äußeren' try's' außer ''' landen. – jonrsharpe
Das ist, was ich tun möchte, und ich war besorgt, dass nur eine einzige außer möglich wäre. Ich hoffe auf eine elegantere Lösung, die etwas wie verschachteltes else/code duplication – OverlordAlex