2013-05-09 19 views

risposta

6

A partire da Python 2.5, è disponibile un nuovo BaseException che funge da classe base per Exception. Di conseguenza, qualcosa come GeneratorExit che inerisce direttamente da BaseException verrebbe rilevato da except: ma non da except Exception:.

+2

+1 per aver menzionato 'BaseException'. Una cosa importante che 'except:' rileva che 'tranne Exception:' does not is 'KeyboardInterrupt'. L'uso liberale di bare 'except:' può rendere difficile fermare i tuoi script! – kindall

+0

Questo è corretto. [KeyboardInterrupt] (http://docs.python.org/2/library/exceptions.html#exceptions.KeyboardInterrupt) eredita anche da BaseException. – marcoseu

+0

SystemExit eredita anche da BaseExcrption –

0

Questo è dal doc

Se si verifica un'eccezione che non corrisponde a quella citata nella clausola except , viene trasmessa a eventuali istruzioni try di livello superiore; se non viene trovato alcun gestore , si tratta di un'eccezione non gestita e l'esecuzione si interrompe con un messaggio come mostrato sopra.

Si può anche essere più specifici.

>>> while True: 
...  try: 
...   x = int(raw_input("Please enter a number: ")) 
...   break 
...  except ValueError: 
...   print "Oops! That was no valid number. Try again..." 

Qui, si entra clausola except solo se si è di fronte l'errore di nome, ValueError

Problemi correlati