La gestió d'excepcions és una part fonamental de la programació en Python. Ens permet manejar errors i situacions inesperades de manera controlada, evitant que el programa es bloquegi i proporcionant una millor experiència d'usuari. En aquesta secció, aprendrem com capturar i gestionar excepcions utilitzant les estructures try, except, else i finally.
Conceptes Clau
- Excepcions: Errors que es produeixen durant l'execució d'un programa.
- Blocs
tryiexcept: Estructures per capturar i gestionar excepcions. - Blocs
elseifinally: Estructures opcionals per afegir lògica addicional després de gestionar una excepció.
Blocs try i except
El bloc try conté el codi que pot generar una excepció. Si es produeix una excepció, el bloc except captura l'error i executa el codi corresponent.
Sintaxi
Exemple
En aquest exemple, es produeix una excepció ZeroDivisionError quan intentem dividir per zero. El bloc except captura l'excepció i imprimeix un missatge d'error.
Captura d'Excepcions Específiques
Podem capturar diferents tipus d'excepcions especificant el tipus d'excepció després de la paraula clau except.
Exemple
try:
fitxer = open('fitxer_inexistent.txt', 'r')
except FileNotFoundError:
print("Error: El fitxer no existeix.")
except IOError:
print("Error: Problema d'entrada/sortida.")En aquest exemple, capturem dues excepcions diferents: FileNotFoundError i IOError.
Blocs else i finally
El bloc else s'executa si no es produeix cap excepció, mentre que el bloc finally s'executa sempre, independentment de si es produeix una excepció o no.
Exemple
try:
fitxer = open('fitxer.txt', 'r')
contingut = fitxer.read()
except FileNotFoundError:
print("Error: El fitxer no existeix.")
else:
print("El fitxer s'ha llegit correctament.")
finally:
fitxer.close()
print("El fitxer s'ha tancat.")En aquest exemple, el bloc else s'executa si el fitxer s'obre i es llegeix correctament, mentre que el bloc finally s'executa sempre per assegurar que el fitxer es tanqui.
Exercicis Pràctics
Exercici 1
Escriu un programa que demani a l'usuari que introdueixi dos nombres i mostri el resultat de la seva divisió. Gestiona l'excepció ZeroDivisionError per evitar que el programa es bloquegi si l'usuari introdueix zero com a divisor.
Solució
try:
num1 = float(input("Introdueix el primer nombre: "))
num2 = float(input("Introdueix el segon nombre: "))
resultat = num1 / num2
except ZeroDivisionError:
print("Error: No es pot dividir per zero.")
except ValueError:
print("Error: Si us plau, introdueix un nombre vàlid.")
else:
print(f"El resultat de la divisió és: {resultat}")Exercici 2
Escriu un programa que intenti obrir un fitxer i llegir-ne el contingut. Gestiona les excepcions FileNotFoundError i IOError per proporcionar missatges d'error adequats.
Solució
try:
fitxer = open('fitxer_inexistent.txt', 'r')
contingut = fitxer.read()
except FileNotFoundError:
print("Error: El fitxer no existeix.")
except IOError:
print("Error: Problema d'entrada/sortida.")
else:
print("El contingut del fitxer és:")
print(contingut)
finally:
try:
fitxer.close()
except NameError:
pass
print("El fitxer s'ha tancat (si estava obert).")Errors Comuns i Consells
- No capturar excepcions específiques: Capturar excepcions generals (
Exception) pot amagar errors específics que necessiten una gestió diferent. - No tancar recursos: Assegura't de tancar fitxers o altres recursos al bloc
finallyper evitar fuites de recursos. - No proporcionar informació d'error útil: Proporciona missatges d'error clars i útils per ajudar a diagnosticar problemes.
Resum
En aquesta secció, hem après com gestionar excepcions en Python utilitzant els blocs try, except, else i finally. Hem vist com capturar excepcions específiques i com assegurar-nos que els recursos es tanquin correctament. També hem practicat amb exercicis per reforçar aquests conceptes. La gestió d'excepcions és una habilitat essencial per escriure codi robust i fiable.
Curs de Programació en Python
Mòdul 1: Introducció a Python
- Introducció a Python
- Configuració de l'Entorn de Desenvolupament
- Sintaxi de Python i Tipus de Dades Bàsics
- Variables i Constants
- Entrada i Sortida Bàsiques
Mòdul 2: Estructures de Control
Mòdul 3: Funcions i Mòduls
- Definició de Funcions
- Arguments de Funció
- Funcions Lambda
- Mòduls i Paquets
- Visió General de la Biblioteca Estàndard
Mòdul 4: Estructures de Dades
Mòdul 5: Programació Orientada a Objectes
Mòdul 6: Gestió de Fitxers
- Lectura i Escriptura de Fitxers
- Treballant amb Fitxers CSV
- Gestió de Dades JSON
- Operacions amb Fitxers i Directoris
Mòdul 7: Gestió d'Errors i Excepcions
Mòdul 8: Temes Avançats
- Decoradors
- Generadors
- Gestors de Context
- Concurrència: Fils i Processos
- Asyncio per a Programació Asíncrona
Mòdul 9: Proves i Depuració
- Introducció a les Proves
- Proves Unitàries amb unittest
- Desenvolupament Guiat per Proves
- Tècniques de Depuració
- Ús de pdb per a la Depuració
Mòdul 10: Desenvolupament Web amb Python
- Introducció al Desenvolupament Web
- Conceptes Bàsics del Framework Flask
- Construcció d'APIs REST amb Flask
- Introducció a Django
- Construcció d'Aplicacions Web amb Django
Mòdul 11: Ciència de Dades amb Python
- Introducció a la Ciència de Dades
- NumPy per al Càlcul Numèric
- Pandas per a la Manipulació de Dades
- Matplotlib per a la Visualització de Dades
- Introducció al Machine Learning amb scikit-learn
