2.1 Створення винятків
Не можеш перемогти — очоль. Якщо ми не можемо уникнути виникнення помилок у програмі, ми повинні навчитися їх контролювати. А для цього давайте навчимося свідомо створювати винятки.
Найпростіший приклад винятку — це ділення на нуль. Ну і програма теж проста:
x = 100 / 0
Такий код виконається з помилкою:
Traceback (most recent call last):
File "", line 1, in
x = 100 / 0
~~~^~
ZeroDivisionError: division by zero
ZeroDivisionError — це назва винятку, а division by zero — його короткий опис. Також Python повідомить номер рядка, де цей виняток виник.
Невідповідність типів даних
Звісно, можливі й інші винятки. Наприклад, при спробі скласти рядок і число:
s = "100" + 100
Відбудеться виняток TypeError:
Traceback (most recent call last):
File "", line 1, in
TypeError: unsupported operand type(s) for +: 'str' and 'int'
Вихід за межі списку
Ще одна дуже поширена помилка, яка генерує виняток — це спроба звернутися до елемента, якого немає в списку:
my_list = [1, 2, 3]
print(my_list[10])
Відбудеться виняток IndexError:
Traceback (most recent call last):
print(my_list[10])
~~~~~~~^^^^
IndexError: list index out of range
Скільки ж їх усього? Є тисячі різних типів винятків. Більш того, ви можете створити свої, якщо вам не вистачить існуючих для опису якоїсь специфічної ситуації. Хоча найпопулярніших не так вже й багато.
2.2 Список найпопулярніших винятків
Винятків багато, але вам, як новачкові, буде корисно дізнатися про найпопулярніші. Нижче я наведу таблицю з ними:
| Виняток | Опис |
|---|---|
Exception |
Базовий клас для всіх винятків. |
IndexError |
Виникає при зверненні до неіснуючого індексу у послідовності (наприклад, список або кортеж). |
KeyError |
Виникає при зверненні до неіснуючого ключа в словнику. |
NameError |
Виникає при зверненні до неіснуючої змінної. |
RuntimeError |
Виникає при загальній помилці часу виконання, не відносячися до інших типів винятків. |
StopIteration |
Виникає для сигналізації про закінчення ітерації. |
SyntaxError |
Виникає при синтаксичній помилці в коді. |
IndentationError |
Виникає при помилці відступів у коді (підтип SyntaxError). |
TabError |
Виникає при змішуванні табуляцій і пробілів для відступів (підтип IndentationError). |
TypeError |
Виникає при спробі виконання операції з несумісними типами даних. |
UnboundLocalError |
Виникає при зверненні до локальної змінної до її оголошення (підтип NameError). |
ValueError |
Виникає при передачі функції або операції аргументу з неправильним значенням. |
ZeroDivisionError |
Виникає при діленні на нуль. |
Скоріше за все, ви, як новачок, у перший місяць свого навчання зіткнетеся з усіма цими помилками. І в цьому немає нічого поганого — навчаються лише на помилках.
2.3 Помилки в коді
Давайте розберемо ще кілька ситуацій, коли в коді виникають помилки, щоб ви легше потім їх знаходили у своєму коді:
IndentationError
Цей тип помилки виникає, коли відступи в коді зроблені неправильно. Наприклад, змішування табуляцій і пробілів або неправильна кількість відступів.
def example():
print("Hello")
print("World") # Неправильний відступ викликає IndentationError
example()
NameError
def example():
print(undeclared_variable) # Спроба використовувати неоголошену змінну викликає NameError
example()
ValueError
Цей тип помилки виникає, коли операція або функція отримує аргумент правильного типу, але з непідходящим значенням.
def example():
int("abc") # Спроба перетворити рядок, що не є числом, викликає ValueError
example()
KeyError
Цей тип помилки виникає, коли програма намагається отримати доступ до неіснуючого ключа у словнику.
def example():
my_dict = {"a": 1, "b": 2}
print(my_dict["c"]) # Спроба доступу до неіснуючого ключа викликає KeyError
example()
SyntaxError
Цей тип помилки виникає, коли в коді є синтаксична помилка, тобто код не відповідає граматиці мови Python.
def example():
eval("if True print('Hello')") # Неправильний синтаксис викликає SyntaxError
example()
Хто попереджений, той озброєний. Тепер ви можете розпізнавати і створювати ситуації, які викликають помилки. Настав час навчитися обробляти ці помилки.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ