Ora avete un programma perfetto, funziona senza crepe,
ad eccezione di un dettaglio: va in crash se l'utente
inserisce un input errato. Non abbiate paura, Python
ha una speciale struttura di controllo per eliminare
questi imprevisti. Sto parlando di
try: try
tenta di fare qualcosa. Segue un esempio di un
programma che contiene un problema:
Se tentate di inserire qualcosa come
#@& l'output
sarà simile a questo:
print "Type Control C or -1 to exit"
number = 1
while number != -1:
number = int(raw_input("Enter a number: "))
print "You entered: ",number
Come potete vedere la funzione
int()
non funziona (e non deve funzionare)
con il 'numero' #@&.
L'ultima linea mostra qual'è l'errore:
Python ha trovato un
ValueError.
Come fare in modo che il nostro
programma sappia gestire anche questo
valore ?
Innanzitutto mettendo la parte di
codice che restituisce l'errore in
un blocco try e
poi decidendo come Python
debba trattare
ValueError.
Il seguente programma mostra come ottenere
tale comportamento:
Traceback (innermost last):
File "try_less.py", line 4, in ?
number = int(raw_input("Enter a number: "))
ValueError: invalid literal for int(): @#&
Ora, quando eseguiremo il nuovo programma
ed inseriremo #@& il
programma risponderà con la frase
"That was not a number."
per poi continuare ciò che stava facendo prima.
print "Type Control C or -1 to exit"
number = 1
while number != -1:
try:
number = int(raw_input("Enter a number: "))
print "You entered: ",number
except ValueError:
print "That was not a number."
Quando il vostro programma restituisce un errore che sapete come gestire, mettete il codice in un blocco try e il modo per gestire l'errore nel successivo blocco except.
Aggiornate il programma della rubrica telefonica del capitolo precedente in modo che non fermi l'esecuzione se l'utente non inserisce dati nel menu.