Винятки

Винятки 

Різні винятки створюються з різних причин. 

Поширені винятки:

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