En aquest tema, aprendrem com llançar excepcions en Python. Llançar una excepció és una manera de senyalitzar que ha ocorregut un error o una condició excepcional que el codi no pot gestionar. Això permet que el flux del programa es desviï cap a un bloc de codi que pugui gestionar l'error.

Conceptes Clau

  1. Excepcions: Errors o condicions excepcionals que interrompen el flux normal d'execució d'un programa.
  2. Llançament d'Excepcions: Utilitzar la instrucció raise per generar una excepció intencionadament.
  3. Tipus d'Excepcions: Python proporciona diverses excepcions integrades, com ara ValueError, TypeError, IndexError, etc.

Llançament d'Excepcions amb raise

La instrucció raise s'utilitza per llançar una excepció. La sintaxi bàsica és:

raise ExceptionType("Missatge d'error")

Exemple Bàsic

def dividir(a, b):
    if b == 0:
        raise ValueError("El divisor no pot ser zero.")
    return a / b

try:
    resultat = dividir(10, 0)
except ValueError as e:
    print(f"S'ha produït un error: {e}")

Explicació:

  • La funció dividir llança una ValueError si el divisor és zero.
  • El bloc try intenta executar la funció.
  • El bloc except captura la ValueError i imprimeix un missatge d'error.

Llançament d'Excepcions Personalitzades

També podem definir les nostres pròpies excepcions personalitzades heretant de la classe Exception.

class DivisorZeroError(Exception):
    pass

def dividir(a, b):
    if b == 0:
        raise DivisorZeroError("El divisor no pot ser zero.")
    return a / b

try:
    resultat = dividir(10, 0)
except DivisorZeroError as e:
    print(f"S'ha produït un error: {e}")

Explicació:

  • Hem definit una nova excepció DivisorZeroError que hereta de Exception.
  • La funció dividir llança aquesta excepció personalitzada si el divisor és zero.
  • El bloc except captura la DivisorZeroError i imprimeix un missatge d'error.

Exercicis Pràctics

Exercici 1: Llançament d'Excepcions Integrades

Escriu una funció convertir_a_enter que prengui una cadena i la converteixi a un enter. Si la cadena no es pot convertir, ha de llançar una ValueError.

def convertir_a_enter(cadena):
    # Escriu el teu codi aquí
    pass

# Prova la funció
try:
    print(convertir_a_enter("123"))  # Ha de retornar 123
    print(convertir_a_enter("abc"))  # Ha de llançar ValueError
except ValueError as e:
    print(f"S'ha produït un error: {e}")

Solució de l'Exercici 1

def convertir_a_enter(cadena):
    try:
        return int(cadena)
    except ValueError:
        raise ValueError(f"No es pot convertir '{cadena}' a un enter.")

# Prova la funció
try:
    print(convertir_a_enter("123"))  # Ha de retornar 123
    print(convertir_a_enter("abc"))  # Ha de llançar ValueError
except ValueError as e:
    print(f"S'ha produït un error: {e}")

Exercici 2: Excepcions Personalitzades

Defineix una excepció personalitzada NegatiuError i escriu una funció arrel_quadrada que calculi l'arrel quadrada d'un nombre. Si el nombre és negatiu, ha de llançar NegatiuError.

class NegatiuError(Exception):
    pass

def arrel_quadrada(x):
    # Escriu el teu codi aquí
    pass

# Prova la funció
try:
    print(arrel_quadrada(9))  # Ha de retornar 3.0
    print(arrel_quadrada(-1))  # Ha de llançar NegatiuError
except NegatiuError as e:
    print(f"S'ha produït un error: {e}")

Solució de l'Exercici 2

class NegatiuError(Exception):
    pass

def arrel_quadrada(x):
    if x < 0:
        raise NegatiuError("No es pot calcular l'arrel quadrada d'un nombre negatiu.")
    return x ** 0.5

# Prova la funció
try:
    print(arrel_quadrada(9))  # Ha de retornar 3.0
    print(arrel_quadrada(-1))  # Ha de llançar NegatiuError
except NegatiuError as e:
    print(f"S'ha produït un error: {e}")

Resum

En aquesta secció, hem après com llançar excepcions en Python utilitzant la instrucció raise. També hem vist com definir i utilitzar excepcions personalitzades. Els exercicis pràctics ens han ajudat a consolidar aquests conceptes. En la següent secció, explorarem com crear excepcions personalitzades per a situacions específiques en els nostres programes.

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