4.1 Перехоплення кількох виключень
Python дозволяє обробляти кілька виключень, використовуючи кілька блоків except або один блок except з кортежем виключень. Розглянемо обидва підходи.
Кілька блоків except
Ти можеш використовувати кілька блоків except, щоб обробляти різні типи виключень по-різному.
try:
# Код, який може викликати виключення
result = int("abc")
except ValueError:
print("Помилка: некоректне значення.")
except ZeroDivisionError:
print("Помилка: ділення на нуль.")
Один блок except з кортежем виключень
Ти можеш обробляти кілька виключень в одному блоці except, передавши їх у вигляді кортежа.
try:
# Код, який може викликати виключення
result = int("abc")
except (ValueError, ZeroDivisionError) as e:
print(f"Сталася помилка: {e}")
Використання except NameError as var
При обробці виключень ти можеш використовувати синтаксис except <ExceptionType> as <variable> для отримання об'єкта виключення. Це дозволяє отримати доступ до інформації про виключення, такої як повідомлення про помилку та інші атрибути.
try:
# Код, який може викликати NameError
print(undeclared_variable)
except NameError as e:
print(f"Сталася помилка: {e}")
print(f"Тип помилки: {type(e)}")
4.2 Область видимості змінної помилки
Змінна, в яку зберігається виключення (e в прикладі вище), доступна тільки всередині свого блоку except. Поза цього блоку змінна недоступна.
try:
# Код, який може викликати NameError
print(undeclared_variable)
except NameError as e:
print(f"Сталася помилка: {e}")
print(f"Тип помилки: {type(e)}")
# Тут e вже недоступна, і наступний рядок викличе NameError
# print(e) # NameError: name 'e' is not defined
Якщо ти хочеш зробити з виключенням щось важливе поза його блоком, то тобі потрібно зберегти його в окрему змінну. Приклад:
exception = None
try:
# Код, який може викликати виключення
result = int("abc")
except ValueError as e:
exception = e
print("Помилка: некоректне значення.")
except ZeroDivisionError as e:
exception = e
print("Помилка: ділення на нуль.")
print(exception)
Зауваж, що змінна exception зберігає останнє виникле виключення, що може бути корисним при подальшій обробці за межами блоку try.
4.3 Що корисного містить в собі помилка
Об'єкт виключення містить інформацію про помилку. Залежно від типу виключення об'єкт може містити різні атрибути.
Ось кілька загальних атрибутів, доступних для більшості виключень:
-
args: Кортеж, що містить аргументи, передані при створенні виключення. Зазвичай це повідомлення про помилку. -
message: Рядок, що містить повідомлення про помилку (в деяких виключеннях). -
__str__: Метод, що повертає рядкове представлення виключення. Цей метод використовується для отримання текстового представлення помилки, яке буде повернуто при використанні функціїprint()на об'єкті виключення.
Приклад:
try:
# Код, який може викликати ValueError
result = int("abc")
except ValueError as e:
print(f"Сталася помилка: {e}")
print(f"Аргументи помилки: {e.args}")
print(f"Повідомлення про помилку: {str(e)}")
Приклад обробки кількох виключень
try:
# Код, який може викликати кілька типів виключень
result = 10 / 0
except (ValueError, ZeroDivisionError) as e:
print(f"Сталася помилка: {e}")
print(f"Тип помилки: {type(e)}")
print(f"Аргументи помилки: {e.args}")
Якщо виникає ValueError або ZeroDivisionError, він буде перехоплений блоком except. Інформація про виключення буде доступна через змінну e. Вивід міститиме тип помилки та аргументи, передані при створенні виключення.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ