2014-10-29 11 views
7

Sto cercando di catturare un'eccezione SystemExit nel modo seguente:non può prendere SystemExit eccezione Python

try: 
    raise SystemExit 
except Exception as exception: 
    print "success" 

Ma, non funziona.

Esso funziona tuttavia quando cambio il mio codice del genere:

try: 
    raise SystemExit 
except: 
    print "success" 

Per quanto ne so, except Exception as exception dovrebbe prendere alcuna eccezione. Ecco come viene descritto anche here. Perché non funziona per me qui?

risposta

17

Come documented, SystemExit non eredita da Eccezione. Dovresti usare except BaseException.

Tuttavia, questo è per una ragione:

L'eccezione eredita da BaseException anziché StandardError o eccezione in modo che non venga accidentalmente catturato dal codice che cattura eccezione.

È insolito voler gestire eccezioni "reali" nello stesso modo in cui si desidera gestire SystemExit. Potrebbe essere meglio prendere SystemExit in modo esplicito con except SystemExit.

+0

Perfetto. Grazie! È molto ben illustrato nella documentazione Gerarchia delle eccezioni: https://docs.python.org/2/library/exceptions.html#exception-hierarchy –

Problemi correlati