logo

Визначені користувачем винятки в Python із прикладами

Визначені користувачем винятки створюються шляхом визначення нового класу, який успадковується Вбудований виняток Python клас або один із його підкласів. Роблячи це, ми можемо створювати власні повідомлення про помилки та обробляти конкретні помилки у спосіб, який є доречним для нашої програми.

Кроки для створення та використання визначених користувачем винятків

Виконайте такі кроки, щоб створити та використовувати визначені користувачем винятки в Python:



  • Визначте новий клас винятків: Створіть новий клас, який успадковує Exception або будь-який з його підкласів.
  • Підніміть виняток: Використовуйте інструкцію raise, щоб викликати визначений користувачем виняток, коли виникає певна умова.
  • Обробка винятку: Використовуйте блоки try-except для обробки визначеного користувачем винятку.

приклад: У цьому прикладі ми створюємо настроюваний виняток InvalidAgeError, щоб гарантувати, що значення віку потрапляють у дійсний діапазон (0–120).

символ екранування java
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) 

Вихід
150 -> Age must be between 0 and 120 

Пояснення:

  • Клас InvalidAgeError успадковується від Exception. Він визначає ан __гарячий__ спосіб прийняти вік і повідомлення.
  • Метод __str__ повертає читабельне рядкове представлення помилки.
  • У set_age() якщо вік виходить за допустимий діапазон (0–120), виникає виняток.
  • Блок try-except перехоплює виняток і друкує повідомлення про помилку.

Налаштування класів винятків

Коли ми створюємо спеціальний виняток, ми створюємо підклас вбудованого класу винятків Python (або підклас, як-от ValueError TypeError тощо). Потім ми можемо додати власні методи атрибутів або настроювану логіку, щоб зробити наш виняток більш інформативним.



Ми також можемо розширити спеціальні винятки, додавши додаткові атрибути або замінивши методи.

приклад: Тут ми покращуємо InvalidAgeError, додаючи код помилки та налаштовуючи повідомлення про помилку.

Python
class 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) 

Вихід
[Error Code 1001] 150 -> Age must be between 0 and 120 

Пояснення:



mvc у рамках Spring
  • InvalidAgeError тепер має додатковий атрибут error_code.
  • Метод __str__ перевизначено для відображення коду помилки та віку.
  • Коли set_age(150) виконується, виняток викликається та переймається в блоці try-except.
  • Друкується спеціальне повідомлення про помилку, що робить помилку більш описовою.

Використання стандартних винятків як базового класу

Іноді замість прямого успадкування від Exception ми можемо створити спеціальний виняток, створивши підклас стандартного винятку, такого як RuntimeError ValueError тощо. Це корисно, коли ваш настроюваний виняток слід розглядати як певний тип помилки.

приклад: У цьому прикладі показано, як створити спеціальний виняток NetworkError шляхом успадкування від RuntimeError, який є стандартним вбудованим винятком.

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) 

Вихід
('Connection failed') 

Пояснення:

  • NetworkError успадковує RuntimeError, який є вбудованим типом винятку.
  • При піднятті повідомлення зберігається в атрибуті args як кортеж.
  • Виняток перехоплюється, і відображаються його збережені аргументи.

Приклад із реального світу: помилка недійсної електронної пошти

Ось простий приклад, у якому ми створюємо спеціальний виняток, якщо електронна адреса недійсна:

Python
class 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) 

Вихід
userexample.com -> Invalid email format 

Пояснення:

  • Для перевірки адрес електронної пошти визначено новий клас винятків InvalidEmailError.
  • Якщо вказаний електронний лист не містить «@», виникає виняток.
  • Блок try-except виявляє помилку та друкує відформатоване повідомлення.

Коли використовувати визначені користувачем винятки?

Визначені користувачем винятки слід враховувати в таких сценаріях:

cpp дорівнює
  • Відображення певних помилок у програмі (наприклад, InvalidAgeError DatabaseConnectionError).
  • Надання більш чітких і описових повідомлень про помилки.
  • Окрема обробка групи пов’язаних помилок за допомогою винятку.

Завдяки використанню визначених користувачем винятків програми стають більш читабельними, зручними для обслуговування та легшими для налагодження.