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

  1. Excepcions: Errors que es produeixen durant l'execució d'un programa.
  2. Blocs try i except: Estructures per capturar i gestionar excepcions.
  3. Blocs else i finally: 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

try:
    # Codi que pot generar una excepció
except ExceptionType:
    # Codi per gestionar l'excepció

Exemple

try:
    resultat = 10 / 0
except ZeroDivisionError:
    print("Error: No es pot dividir per zero.")

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

  1. No capturar excepcions específiques: Capturar excepcions generals (Exception) pot amagar errors específics que necessiten una gestió diferent.
  2. No tancar recursos: Assegura't de tancar fitxers o altres recursos al bloc finally per evitar fuites de recursos.
  3. 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

Mòdul 2: Estructures de Control

Mòdul 3: Funcions i Mòduls

Mòdul 4: Estructures de Dades

Mòdul 5: Programació Orientada a Objectes

Mòdul 6: Gestió de Fitxers

Mòdul 7: Gestió d'Errors i Excepcions

Mòdul 8: Temes Avançats

Mòdul 9: Proves i Depuració

Mòdul 10: Desenvolupament Web amb Python

Mòdul 11: Ciència de Dades amb Python

Mòdul 12: Projecte Final

© Copyright 2024. Tots els drets reservats