Python 3 per a no programadors/Fent front a les imperfeccions
...o còm manegar els errors
[modifica]Així que teniu el programa perfecte, funciona impecablement, tret d'un detall, petarà si l'usuari entra dades invàlides. No us espanteu, a Python hi ha una estructura de control especial per a vosaltres. S'anomena try i prova quelcom. Aquí hi ha un exemple d'un programa amb un problema:
print("Teclegeu Control C o -1 per sortir")
nombre = 1
while nombre != -1:
nombre = int(input("Teclegeu un nombre: "))
print("Heu entrat:", nombre)
Fixeu-vos com quan teclejau @#& dóna quelcom de l'estil:
Traceback (most recent call last):
File "prova.py", line 4, in <module>
nombre = int(input("Teclegeu un nombre: "))
ValueError: invalid literal for int() with base 10: '\\@#&'
Com vodeu veure a la funció int() no li agrada el nombre @#& (com ha de ser). L'última línia mostra quin és el problema; Python ha trobat un ValueError. Com pot tractar això el vostre programa? El que podeu fer és primer: posar la instrucció on es poden produir errors dins d'un bloc try, i segon: dir-li a Python com voleu manegar els ValueErrors. El següent programa fa això:
print("Teclegeu Control C o -1 per sortir")
nombre = 1
while nombre != -1:
nombre = int(input("Teclegeu un nombre: "))
print("Heu entrat:", nombre)
try:
nombre = int(input("Teclegeu un nombre: "))
print("Heu entrat:", nombre)
except ValueError:
print(u"Això no era un nombre.")
Ara quan s'executi el nou programa i se li entri @#& dirà "Això no era un nombre." i continuarà amb el que estava fent abans.
Quan el vostre programa contingui algun error que sabeu com manejar, fiqueu el codi dins d'un bloc try, i fiqueu la manera de manegar l'error al bloc except.
Exercicis
[modifica]Actualitzeu pel capbaix l'últim programa de números de telèfon (al capítol Diccionaris) de manera que no peti si un usuari entra qualsevol dada al menú.