Модуль 6: Файли та обробка помилок

Обробка винятків (try / except)

📖 Теорія
Винятки — це помилки, які виникають під час виконання програми. Python дозволяє їх перехоплювати та обробляти.

Синтаксис:
try:
# код, який може викликати помилку
except ТипПомилки:
# що робити при цій помилці
else:
# виконується якщо винятків не було
finally:
# виконується завжди (очищення ресурсів)

Часті винятки:
• ValueError — невірне значення (int('abc'))
• ZeroDivisionError — ділення на нуль
• FileNotFoundError — файл не знайдено
• KeyError — ключ не знайдено у словнику
• IndexError — індекс поза діапазоном
• TypeError — невірний тип даних
💡 Приклад коду
Вивід:

                        
📝 ЗАВДАННЯ (3)
1.
Завдання 1: Безпечний калькулятор
10 XP
Напишіть програму, яка запитує два числа та операцію (+, -, *, /). Обробіть: невірне введення (не число), ділення на нуль, невідому операцію.
💡 Підказка: Використовуйте кілька except блоків для різних помилок
🔓 Розв'язок:
try:
    a = float(input('Перше число: '))
    b = float(input('Друге число: '))
    op = input('Операція (+, -, *, /): ')
    if op == '+': print(a + b)
    elif op == '-': print(a - b)
    elif op == '*': print(a * b)
    elif op == '/':
        if b == 0: raise ZeroDivisionError
        print(a / b)
    else: print('Невідома операція')
except ValueError:
    print('Помилка: введіть число')
except ZeroDivisionError:
    print('Помилка: ділення на нуль')
Вивід:

                                

2.
Завдання 2: Безпечне введення з повтором
20 XP
Напишіть функцію safe_int_input(prompt), яка просить користувача ввести ціле число. Якщо введення некоректне, функція виводить повідомлення про помилку і просить ввести ще раз (нескінченно, доки не введуть число). Використайте цю функцію для введення віку від 1 до 120.
💡 Підказка: Використовуйте while True з try/except ValueError всередині. При успішному int() робіть return або break.
🔓 Розв'язок:
def safe_int_input(prompt):
    while True:
        try:
            value = int(input(prompt))
            return value
        except ValueError:
            print('Помилка! Введіть ціле число.')

age = safe_int_input('Введіть ваш вік: ')
while age < 1 or age > 120:
    print('Вік має бути від 1 до 120')
    age = safe_int_input('Введіть ваш вік: ')
print(f'Ваш вік: {age}')
Вивід:

                                

3.
Завдання 3: Надійне читання даних із файлу
30 XP
Напишіть програму, яка читає файл numbers.txt (числа, по одному на рядок). Якщо файлу немає — створіть його з числами 10, 20, 30. При читанні обробіть ситуацію, коли рядок не є числом (пропустіть його). Виведіть суму успішно прочитаних чисел та кількість помилок.
💡 Підказка: Використовуйте try/except ValueError при перетворенні кожного рядка в число. Рахуйте помилки в окремій змінній.
🔓 Розв'язок:
import os

if not os.path.exists('numbers.txt'):
    with open('numbers.txt', 'w', encoding='utf-8') as f:
        f.write('10\n20\nаbc\n30\nxyz\n50\n')
    print('Файл створено з тестовими даними')

total = 0
errors = 0
count = 0

with open('numbers.txt', 'r', encoding='utf-8') as f:
    for line in f:
        line = line.strip()
        if not line:
            continue
        try:
            num = float(line)
            total += num
            count += 1
        except ValueError:
            print(f'Пропущено некоректний рядок: "{line}"')
            errors += 1

print(f'Прочитано чисел: {count}')
print(f'Сума: {total}')
print(f'Помилок: {errors}')
Вивід: