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
- Excepcions: Errors o condicions excepcionals que interrompen el flux normal d'execució d'un programa.
- Llançament d'Excepcions: Utilitzar la instrucció
raise
per generar una excepció intencionadament. - 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:
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 unaValueError
si el divisor és zero. - El bloc
try
intenta executar la funció. - El bloc
except
captura laValueError
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 deException
. - La funció
dividir
llança aquesta excepció personalitzada si el divisor és zero. - El bloc
except
captura laDivisorZeroError
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
- 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