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ó
raiseper 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ó
dividirllança unaValueErrorsi el divisor és zero. - El bloc
tryintenta executar la funció. - El bloc
exceptcaptura laValueErrori 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ó
DivisorZeroErrorque hereta deException. - La funció
dividirllança aquesta excepció personalitzada si el divisor és zero. - El bloc
exceptcaptura laDivisorZeroErrori 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
