Модуль 7A: Налагодження та обробка помилок (глибше)
Читання traceback — як розуміти повідомлення про помилки
📖 Теорія
Коли Python зустрічає помилку, він показує traceback (трасування) — докладне повідомлення про те, що пішло не так.
Структура traceback (читаємо знизу вгору):
1. Останній рядок — тип помилки та опис (наприклад: TypeError: unsupported operand type(s))
2. Вище — рядок коду, де сталася помилка
3. Ще вище — файл та номер рядка
4. Якщо викликів було кілька — ланцюжок викликів від початку до місця помилки
Чому важливо читати traceback:
• Він точно вказує рядок з помилкою
• Він пояснює тип проблеми
• Він показує шлях виконання коду
Порада: завжди починайте читати traceback з останнього рядка — там найважливіше.
💡 Приклад коду
Вивід:
📝 ЗАВДАННЯ (2)
/home/u994965865/domains/navychky.com.ua/public_html/course/lesson.php on line 208
"
data-task-id=" Warning: Undefined array key "id" in /home/u994965865/domains/navychky.com.ua/public_html/course/lesson.php on line 209
"
data-xp="10">
1.
Завдання: Прочитай traceback
10 XP
Запустіть код нижче та прочитайте traceback. Визначте: тип помилки, номер рядка, причину. Виправте код.
Код:
name = 'Діма'
age = '25'
print(name + ' — вік: ' + age + 1)
/home/u994965865/domains/navychky.com.ua/public_html/course/lesson.php on line 278
">
💡 Підказка: Зверніть увагу на типи даних: age — рядок, а 1 — число. Додавання рядка і числа викликає TypeError.
/home/u994965865/domains/navychky.com.ua/public_html/course/lesson.php on line 287
">
🔓 Розв'язок:
name = 'Діма'
age = '25'
# Помилка: не можна додавати рядок і число
# Виправлення:
print(name + ' — вік: ' + str(int(age) + 1))
/home/u994965865/domains/navychky.com.ua/public_html/course/lesson.php on line 296
">
Вивід:
/home/u994965865/domains/navychky.com.ua/public_html/course/lesson.php on line 304
">
/home/u994965865/domains/navychky.com.ua/public_html/course/lesson.php on line 208
"
data-task-id=" Warning: Undefined array key "id" in /home/u994965865/domains/navychky.com.ua/public_html/course/lesson.php on line 209
"
data-xp="20">
2.
Завдання: Знайди помилку за traceback
20 XP
Ось traceback:
Traceback (most recent call last):
File "main.py", line 3, in <module>
result = calculate(10, 0)
File "main.py", line 2, in calculate
return a / b
ZeroDivisionError: division by zero
Відповідайте: 1) Яка помилка? 2) У якій функції? 3) Який рядок? 4) Напишіть виправлену функцію calculate.
/home/u994965865/domains/navychky.com.ua/public_html/course/lesson.php on line 278
">
💡 Підказка: ZeroDivisionError — ділення на нуль. Додайте перевірку if b == 0.
/home/u994965865/domains/navychky.com.ua/public_html/course/lesson.php on line 287
">
🔓 Розв'язок:
def calculate(a, b):
if b == 0:
print('Помилка: ділення на нуль!')
return None
return a / b
result = calculate(10, 0)
print(result)
/home/u994965865/domains/navychky.com.ua/public_html/course/lesson.php on line 296
">
Вивід:
/home/u994965865/domains/navychky.com.ua/public_html/course/lesson.php on line 304
">