Les excepcions definides per l'usuari es creen definint una nova classe de la qual hereta Excepció integrada de Python classe o una de les seves subclasses. D'aquesta manera, podem crear missatges d'error personalitzats i gestionar errors específics d'una manera que tingui sentit per a la nostra aplicació.
android.process.acore continua aturant-se
Passos per crear i utilitzar excepcions definides per l'usuari
Seguiu aquests passos per crear i utilitzar excepcions definides per l'usuari a Python:
- Definiu una nova classe d'excepció: Creeu una classe nova que hereti d'Exception o qualsevol de les seves subclasses.
- Aixeca l'excepció: Utilitzeu la instrucció d'augment per generar l'excepció definida per l'usuari quan es produeix una condició específica.
- Gestioneu l'excepció: Utilitzeu blocs try-except per gestionar l'excepció definida per l'usuari.
Exemple: En aquest exemple, creem una excepció personalitzada InvalidAgeError per assegurar-nos que els valors d'edat es troben dins d'un interval vàlid (0-120).
Python# Step 1: Define a custom exception class class InvalidAgeError(Exception): def __init__(self age msg='Age must be between 0 and 120'): self.age = age self.msg = msg super().__init__(self.msg) def __str__(self): return f'{self.age} -> {self.msg}' # Step 2: Use the custom exception in your code def set_age(age): if age < 0 or age > 120: raise InvalidAgeError(age) else: print(f'Age set to: {age}') # Step 3: Handling the custom exception try: set_age(150) # This will raise the custom exception except InvalidAgeError as e: print(e)
Sortida
150 -> Age must be between 0 and 120
Explicació:
- La classe InvalidAgeError hereta de l'excepció. Defineix un __calent__ mètode per acceptar l'edat i el missatge.
- El mètode __str__ retorna una representació de cadena llegible de l'error.
- A set_age() si l'edat està fora de l'interval vàlid (0–120), es genera l'excepció.
- El bloc try-except captura l'excepció i imprimeix el missatge d'error.
Personalització de classes d'excepció
Quan creem una excepció personalitzada, subclassem la classe d'excepcions integrada de Python (o una subclasse com ValueError TypeError, etc.). Aleshores podem afegir els nostres propis mètodes d'atributs o lògica personalitzada per fer que la nostra excepció sigui més informativa.
També podem millorar les excepcions personalitzades afegint atributs addicionals o mètodes d'anul·lació.
Exemple: Aquí millorem l'InvalidAgeError afegint un codi d'error i personalitzant el missatge d'error.
Pythonclass InvalidAgeError(Exception): def __init__(self age msg='Age must be between 0 and 120' error_code=1001): self.age = age self.msg = msg self.error_code = error_code super().__init__(self.msg) def __str__(self): return f'[Error Code {self.error_code}] {self.age} -> {self.msg}' try: set_age(150) # This will raise the custom exception except InvalidAgeError as e: print(e)
Sortida
[Error Code 1001] 150 -> Age must be between 0 and 120
Explicació:
- InvalidAgeError ara té un atribut addicional error_code.
- El mètode __str__ s'ha substituït per mostrar tant el codi d'error com l'edat.
- Quan s'executa set_age(150), l'excepció es planteja i es captura al bloc try-except.
- El missatge d'error personalitzat s'imprimeix fent que l'error sigui més descriptiu.
Ús d'excepcions estàndard com a classe base
De vegades, en comptes d'heretar directament d'Exception, podem crear una excepció personalitzada subclassificant una excepció estàndard, com ara RuntimeError ValueError, etc. Això és útil quan la vostra excepció personalitzada s'ha de tractar com un tipus d'error específic.
Exemple: Aquest exemple mostra com crear una excepció personalitzada NetworkError heretant de RuntimeError, que és una excepció integrada estàndard.
Python# NetworkError has base RuntimeError and not Exception class NetworkError(RuntimeError): def __init__(self arg): self.args = (arg) # store as tuple try: raise NetworkError('Connection failed') except NetworkError as e: print(e.args)
Sortida
('Connection failed') Explicació:
- NetworkError hereta de RuntimeError, que és un tipus d'excepció integrat.
- Quan es planteja el missatge s'emmagatzema a l'atribut args com una tupla.
- S'ha capturat l'excepció i es mostren els seus arguments emmagatzemats.
Exemple del món real: error de correu electrònic no vàlid
Aquí teniu un exemple senzill en què plantegem una excepció personalitzada si l'adreça de correu electrònic no és vàlida:
Pythonclass InvalidEmailError(Exception): def __init__(self email msg='Invalid email format'): self.email = email self.msg = msg super().__init__(self.msg) def __str__(self): return f'{self.email} -> {self.msg}' def set_email(email): if '@' not in email: raise InvalidEmailError(email) print(f'Email set to: {email}') try: set_email('userexample.com') except InvalidEmailError as e: print(e)
Sortida
userexample.com -> Invalid email format
Explicació:
- S'ha definit una nova classe d'excepció InvalidEmailError per validar les adreces de correu electrònic.
- Si el correu electrònic donat no conté '@', es planteja l'excepció.
- El bloc try-except detecta l'error i imprimeix el missatge amb format.
Quan utilitzar les excepcions definides per l'usuari?
Les excepcions definides per l'usuari s'han de considerar en els escenaris següents:
- Representar errors específics en una aplicació (p. ex., InvalidAgeError DatabaseConnectionError).
- Proporcionar missatges d'error més clars i descriptius.
- Gestionar un grup d'errors relacionats per separat mitjançant excepte.
Mitjançant l'ús d'excepcions definides per l'usuari, els programes es fan més llegibles i fàcils de depurar.