Python versione Bignami - Le eccezioni
Sintassi
try: # Codice raise BadError # Altro codice raise VerboseError("long description") except BadError: # Executed if BadError happens except (OneError, AnotherError): # Executed if OneError or AnotherError happen except VerboseError, ve: # Catch VerboseError and its exception object print ve.description except: # Catches all exceptions not catched before print "unknown bad things happened" # Reraises the exception raise else: # Executed if no exception is raised finally: # Executed always, even if exceptions are not caught or thrown or rethrown # in the except handlers.
try:apre il blocco di codice su cui si gestiscono le eccezioni.except Tipo:cattura le eccezioni di un tipo specifico.except (Tipo1, Tipo2, Tipo3...):cattura le eccezioni di uno dei tipi dati.except Tipo, valore:cattura le eccezioni di un tipo dato, gestendo non solo il tipo di eccezione ma anche l'oggetto eccezione lanciato.except:gestisce tutte le eccezioni non gestite da altri except.else:viene eseguito se non sono state lanciate eccezioni.finally:viene eseguito sempre, anche se vi sono eccezioni non gestite.raise Tipolancia un'eccezione.raise Tipo(arg1, arg2)lancia un'eccezione con l'oggetto e non solo il tipo. L'oggetto lanciato si può recuperare usandoexcept Tipo, val:raiserilancia l'eccezione che sta venendo gestita
Esempi:
# Crea un file e lo copia su un'altra macchina con scp try: file = open(filename, "w") print >>file, value file.close() subprocess.check_call(["/usr/bin/scp", filename, "host:"]) except IOError: # Handle errors opening or writing to the file # ... except CalledProcessError e: # Handle the case of scp returning a non-0 status # ... print >>sys.stderr, "Scp returned nonzero status", e.errno else: print "The results are now on host in the file", filename finally: try: os.remove(filename) except: # Ignore all errors trying to remove the file pass