Винятки
Винятки
Різні винятки створюються з різних причин.
Поширені винятки:
ImportError : помилка імпорту;
IndexError : список індексується числом, що виходить за межі діапазону;
NameError : використовується невідома змінна;
SyntaxError : код не може бути проаналізований належним чином;
TypeError : функція викликається зі значенням невідповідного типу;
ValueError : функція викликається для значення правильного типу, але з невідповідним значенням.
Python має кілька інших вбудованих винятків, таких як ZeroDivisionError і OSError. Сторонні бібліотеки також часто визначають власні винятки
Обробка винятків
Коли виникає виняткова ситуація, програма припиняє виконання.
Для обробки винятків і виклику коду, коли виникає виняток, ви можете використовувати оператор try/except .
Блок try містить код, який може викликати виняток. Якщо виникає така виняткова ситуація, код у блоці try припиняє виконуватися, і виконується код у блоці osim . Якщо помилки не виникає, код у блоці винятків не виконується.
try:
num1 = 7
num2 = 0
print (num1 / num2)
print("Done calculation")
except ZeroDivisionError:
print("An error occurred")
print("due to zero division")
Інструкція try може мати кілька різних блоків , except винятків, для обробки різних винятків.
Кілька винятків також можна помістити в один блок except за допомогою круглих дужок, щоб блок except обробляв їх усі.
try:
variable = 10
print(variable + "hello")
print(variable / 2)
except ZeroDivisionError:
print("Divided by zero")
except (ValueError, TypeError):
print("Error occurred")
Оператор винятку без вказаного винятку перехопить усі помилки. Їх слід використовувати обережно, оскільки вони можуть виявити несподівані помилки та приховати помилки програмування.
try:
word = "spam"
print(word / 0)
except:
print("An error occurred")
Після оператора try/except може слідувати блок finally . Він виконуватиметься після блоку try/except , незалежно від того, сталася виняток чи ні.
Блок finally корисний, наприклад, під час роботи з файлами та ресурсами: його можна використовувати, щоб переконатися, що файли чи ресурси закриті або звільнені незалежно від того, чи сталася виняткова ситуація.
try:
print("Hello")
print(1 / 0)
except ZeroDivisionError:
print("Divided by zero")
finally:
print("This code will run no matter what")
Оператор else можна також використовувати з операторами try/except .
У цьому випадку код у ньому виконується, лише якщо в операторі try не виникає помилки .
try:
print(1)
except ZeroDivisionError:
print(2)
else:
print(3)
try:
print(1/0)
except ZeroDivisionError:
print(4)
else:
print(5)
Результат:
1
3
4
try:
print(1)
except ZeroDivisionError:
print(2)
else:
print(3)
finally:
print("=======")
try:
print(1/0)
except ZeroDivisionError:
print(4)
else:
print(5)
finally:
print("=======")
Результат:
1
3
=======
4
=======
Створення винятків
Ви можете створювати (або викликати) винятки, коли виникає певна умова.
Наприклад, коли ви приймаєте дані користувача, які повинні бути в певному форматі, ви можете створити виняток, якщо вони не відповідають вимогам.
Це робиться за допомогою оператора raise .
Потрібно вказати тип викликаного винятку. У коді вище ми викликаємо ValueError
num = 99+2
if num > 100:
raise ValueError
Traceback (most recent call last):
File "file0.py", line 3, in <module>
raise ValueError
ValueError