Python 3 per a no programadors/Fent front a les imperfeccions
...o còm manegar els errors
modificaAixí 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 ValueError
s. 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
modificaActualitzeu 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ú.