Mi stavo chiedendo se si potesse controrilanciare un'eccezione (specifica) rilevata e farla catturare da una versione successiva (generale) tranne che nella stessa prova, eccetto. Ad esempio, voglio fare qualcosa con un IOError specifico, ma se non è l'IOError previsto, l'eccezione dovrebbe essere gestita come qualsiasi altro errore. Quello che ho inizialmente provato: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
Tuttavia, questo non funziona: il rilancio ri-solleva l'eccezione di fuori del contesto del try-except. Quale sarebbe il modo pititico di scrivere questo per ottenere il comportamento 'fall-through' dell'eccezione desiderata?
(Sono consapevole c'era un proposto 'condizionale tranne' che non è stato attuato, che potrebbe aver risolto questo)
Quindi si desidera passare dal blocco "tranne IOError' al blocco" tranne eccezione "? Per quanto ne so che non è possibile, solo un blocco 'tranne' (o il blocco' else') viene eseguito per un determinato 'try'. Potresti racchiudere il tutto in un altro 'try', rimuovendo l'interiore' except Exception', il che significherebbe tutto tranne che l'IOError '' Handling 'specifico' finirà nell'esterno 'try''s' except's. – jonrsharpe
Questo è quello che voglio fare, ed ero preoccupato che solo un singolo fosse possibile. Spero che una soluzione più elegante sia qualcosa di simile alla duplicazione nidificata di altri/codice – OverlordAlex