Revision 1 as of 2004-11-26 19:40:25

Clear message

Manutenere le Eccezioni

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

   1 (x,y) = (5,0)
   2 try:
   3   z = x/y
   4 except ZeroDivisionError:
   5   print "divide by zero"

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

   1 (x,y) = (5,0)
   2 try:
   3   z = x/y
   4 except ZeroDivisionError, e:
   5   z = e # representation: "<exceptions.ZeroDivisionError instance at 0x817426c>"
   6 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 (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:

   1 import sys
   2 try:
   3   untrusted.execute()
   4 except: # catch *all* exceptions
   5   e = sys.exc_info()[1]
   6   write_to_page( "<p>Error: %s</p>" % e )

MoinMoin software è un buon esempio su dove in generale catturare gli errori. Se scrivte MoinMoin macro estensione,e diamo avvio ad un errore,MoinMoin 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:

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

Vedi Anche

Su questa wiki:WritingExceptionClasses, TracebackModule.

Per idde generali(non specificate in Python) circa le eccezioni,consulatre 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:

   1 import sys
   2 try:
   3   untrusted.execute()
   4 except: # catch *all* exceptions
   5   e = sys.exc_info()[1]
   6   write_to_page( "<p>Error: %s</p>" % e )

Tuttavia in origine era:

   1 try:
   2   untrusted.execute()
   3 except Exception, e:
   4   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:

   1 (a,b,c) = d

... e Python soffia indietro

ValueError: unpack list of wrong size

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

Unable to edit the page? See the FrontPage for instructions.