= Manutenere le Eccezioni =


Un semplice modo per manutenere le eccezioni è usare il blocco "try-except" --> "prova all'innfuoridi"

{{{
#!python
(x,y) = (5,0)
try:
  z = x/y
except ZeroDivisionError:
  print "divide by zero"
}}}

Se volete esaminare l'eccezione dal codice,guardate qua: 

{{{
#!python
(x,y) = (5,0)
try:
  z = x/y
except ZeroDivisionError, e:
  z = e # representation: "<exceptions.ZeroDivisionError instance at 0x817426c>"
print z # output: "integer division or modulo by zero"
}}}

== Prendiamo il controllo generale del codice ==

Talvolta,potete prendere "all" tutti gli errori che è possibile generare, ma di solito non è possibile.Nella mag-
gior parte dei casi,quanto specificate tanto è possibile (Wiki:CatchWhatYouCanHandle). Nel primo caso, se stavate usando una clausola eccezione incontrata e l'utente ha premuto Ctrl-C,generando una KeyboardInterrupt (interruzione da tastiera),non desiderate che il programma emetta il messaggio "divide by zero"--> (divisione per zero.)

Tuttavia,ci sono alcune situazioni in cui è meglio prendere ''all'' tutti gli errori

Per esempio, supponiamo che scriviate un modulo per un servizio web. Vorrete che le informazioni inerenti gli errori sia riportate in una pagina web, e il server continui a girare,se tutto ciò è possibile.Ma voi non avete idea che tipo di errori dovete mettere nbel vs codice.

In una situazio9ne di questo tipo,il codice potrebbe essere simile a questo:

{{{
#!python
import sys
try:
  untrusted.execute()
except: # catch *all* exceptions
  e = sys.exc_info()[1]
  write_to_page( "<p>Error: %s</p>" % e )
}}}


MoinMoin software è un buon esempio su dove in generale catturare  gli errori. Se scrivte Moin``Moin macro estensione,e diamo avvio ad un errore,Moin''Moin prepareà un dettagliato rapporto circa l'errore e la catena di eventi che conduce a lui. Il software Python deve essere abilitato a catturare tutti gli errori, e li spedisce poi alla pagina web. 

== Ricerca di Nomi Specifici di Eccezioni ==

Eccezioni Standard che possono essere emesse sono dettaglaite in questo sito:

  http://python.org/doc/lib/module-exceptions.html

Osservate la Classe documentazione per trovare che eccezioni una data classe può emeyttere.

= Vedi Anche =

Su questa [[WritingExceptionClasses]], TracebackModule.

Per idde generali(non specificate in Python) circa le eccezioni,consulatre Wiki:ExceptionPatterns.

= Per scrivere sull'argomento....... =

  * Dammi un esempio di IOError, e interpretiamo il codice di errore

  * Dammi un esempio di eccezioni multiple. Manteniamo le eccezioni multiple in linea

  * Mostra come usare "else" e "finalità"

  * Mostra come continuare con un "rialzo" 

= Domande =

== Manutenzione generale degli errori ==

Nella sezione "manutenzione generale degli errori", si è detto che per la cattura degli errori userete questo codice:

{{{
#!python
import sys
try:
  untrusted.execute()
except: # catch *all* exceptions
  e = sys.exc_info()[1]
  write_to_page( "<p>Error: %s</p>" % e )
}}}

Tuttavia in origine era:

{{{
#!python
try:
  untrusted.execute()
except Exception, e:
  write_to_page( "<p>Error: %s</p>" % str(e) )
}}}

Alcune indicano che "except" catturano piu di un semplice "except Exception, e."

''Perchè è questo il caso??.Qual è la differenza?'' --LionKimbro.

Per ora ( nella ver. 2.3) l'eccezionempm ha ereditato da Exception. Allora pianifichiamo 'except:' catturiamo tutte le eccezioni,non solo quelle di sistema. -- MikeRovner <<DateTime(2004-01-19T05:49:19Z)>>

== Prendiamo utili Informazioni da una eccezione ==

Cosi si pò avere qualcosa di simile:

{{{
#!python
(a,b,c) = d
}}}

... e Python soffia indietro

{{{
ValueError: unpack list of wrong size
}}}

.... e cosi,naturalmente chiederete, "bene che, cosa 'era' in {{{d}}}?"