Python у роботі з файлами та обробка винятків (Exception Handling)

Автор Vagfo, Бер. 18, 2026, 12:40 PM

« попередня та - наступна тема »

Vagfo

У Python робота з файлами та обробка винятків — це незамінні частини реальних проєктів. Завдяки читанню/запису файлів ви зберігаєте дані назавжди, керуєте конфігураційними файлами або ведете логи. Обробка винятків дозволяє програмі не падати в несподіваних ситуаціях, а елегантно обробляти помилки. Станом на 2026 рік ці теми особливо критичні в data science, автоматизації, веб-скрапінгу та бекенд-розробці (Django/Flask).

У Google в Україні та світі дуже високий попит на запити «Python робота з файлами», «Python try except», «Python with open», «Python exception handling». Від початківців до середнього рівня — всі вивчають ці теми. Ці навички роблять ваш код надійним (robust) і виділяють вас у професійних проєктах.

Чому варто вивчати роботу з файлами та обробку винятків? (перспектива 2026)
  • Збереження даних: щоб після закриття програми дані не зникали (CSV, JSON, TXT-логи).
  • Реальна інтеграція: зберігання даних з API, читання конфігурацій.
  • Толерантність до помилок: навіть якщо користувач введе щось неправильно — програма не впаде.
  • Популярне використання: Pandas читає файли, у великих проєктах усі винятки логуються.
  • Перевага на кар'єрі: на співбесі часто запитують про блоки try-except-finally.

1. Робота з файлами (File I/O)
У Python файли відкриваються функцією open(). Найкраща практика — використовувати блок with (файл автоматично закривається, немає витоків ресурсів).
Ось основні приклади:

# Запис (write) — створює файл, якщо його немає
with open("example.txt", "w", encoding="utf-8") as file:
    file.write("Привіт, Python!\n")
    file.write("Це другий рядок.\n")
    file.writelines(["Третій рядок\n", "Четвертий рядок\n"])

# Дописування (append)
with open("example.txt", "a", encoding="utf-8") as file:
    file.write("Новий доданий рядок.\n")

# Читання (read)
with open("example.txt", "r", encoding="utf-8") as file:
    content = file.read()  # читає все
    print(content)

# Альтернативи
# file.seek(0)          # повернутися на початок
# lines = file.readlines()  # список рядків
# for line in file:        # ітерація по рядках (економить пам'ять)
#    print(line.strip())

Режими файлів:
  • "r" — читання (за замовчуванням)
  • "w" — запис (очищує файл)
  • "a" — дописування
  • "x" — створення нового файлу (помилка, якщо вже існує)
  • "b" — бінарний режим (для зображень, відео: "rb", "wb")
  • "t" — текстовий режим (за замовчуванням)
Encoding: для українських символів обов'язково encoding="utf-8".

Робота з CSV-файлами
CSV — основа для data science. Використовуйте вбудований модуль csv або Pandas.

import csv

# Запис
with open("data.csv", "w", newline="", encoding="utf-8") as file:
    writer = csv.writer(file)
    writer.writerow(["Ім'я", "Вік", "Місто"])
    writer.writerow(["Андрій", 30, "Київ"])
    writer.writerows([["Олена", 25, "Львів"], ["Максим", 35, "Одеса"]])

# Читання
with open("data.csv", "r", encoding="utf-8") as file:
    reader = csv.reader(file)
    for row in reader:
        print(row)

# DictReader / DictWriter (з заголовками)
with open("data.csv", "r", encoding="utf-8") as file:
    reader = csv.DictReader(file)
    for row in reader:
        print(row["Ім'я"], row["Вік"])

Робота з JSON-файлами
API зазвичай повертають JSON. Модуль json робить все просто.

import json

# Запис словника в JSON
data = {
    "users": [
        {"name": "Гакан", "age": 28},
        {"name": "Зейнеп", "age": 32}
    ]
}

with open("data.json", "w", encoding="utf-8") as file:
    json.dump(data, file, ensure_ascii=False, indent=4)  # українські символи

# Читання JSON
with open("data.json", "r", encoding="utf-8") as file:
    loaded = json.load(file)
    print(loaded["users"][0]["name"])  # Гакан

Бінарні файли (приклад копіювання зображення)

with open("example.jpg", "rb") as source:
    with open("copy.jpg", "wb") as target:
        target.write(source.read())

Робота зі шляхами (pathlib — сучасний спосіб)
У 2026 році рекомендують pathlib замість старого os.path.

from pathlib import Path

file_path = Path("example.txt")
print(file_path.exists())              # чи існує?
print(file_path.read_text(encoding="utf-8"))  # читання
file_path.write_text("Новий вміст", encoding="utf-8")  # запис

folder = Path("new_folder")
folder.mkdir(exist_ok=True)  # створює папку

2. Обробка винятків (Exception Handling)
Блоки try-except-else-finally дозволяють ловити помилки.

try:
    number = int(input("Введіть число: "))
    result = 100 / number
except ZeroDivisionError:
    print("На нуль ділити не можна!")
except ValueError:
    print("Будь ласка, введіть коректне число!")
except Exception as e:  # загальна помилка
    print(f"Несподівана помилка: {e}")
else:
    print(f"Результат: {result}")  # виконується, якщо немає помилки
finally:
    print("Операцію завершено.")  # завжди виконується

Підняття власних винятків (raise)

def age_check(age):
    if age < 0:
        raise ValueError("Вік не може бути від'ємним!")
    return age

try:
    age_check(-5)
except ValueError as error:
    print(error)  # Вік не може бути від'ємним!

Власні класи винятків

class NegativeAgeError(Exception):
    pass

def age_check(age):
    if age < 0:
        raise NegativeAgeError("Вік не може бути від'ємним!")

try:
    age_check(-10)
except NegativeAgeError as error:
    print(error)

Поширені типи винятків:
  • FileNotFoundError — файл не знайдено
  • PermissionError — помилка доступу
  • KeyError — ключ у словнику відсутній
  • IndexError — індекс за межами списку
  • TypeError — неправильний тип
  • ImportError / ModuleNotFoundError

Реальний приклад: читання файлу з обробкою помилок

def read_file(filename):
    try:
        with open(filename, "r", encoding="utf-8") as file:
            return file.read()
    except FileNotFoundError:
        print(f"Файл {filename} не знайдено!")
        return None
    except PermissionError:
        print("Немає прав на читання файлу!")
        return None
    except Exception as e:
        print(f"Помилка: {e}")
        return None

content = read_file("no_file.txt")
if content:
    print(content)

Просунуті теми
  • Модуль logging — запис помилок у файл
import logging
logging.basicConfig(filename="errors.log", level=logging.ERROR)
logging.error("Сталася помилка!")

  • Контекстні менеджери — власні with через __enter__ та __exit__
  • Pandaspd.read_csv(), pd.to_excel() (з openpyxl)

Підсумок та практичні поради
Робота з файлами та обробка винятків піднімає ваш код на професійний рівень. Завжди використовуйте try-except та блок with. Практикуйтеся:
  • Створіть особистий нотатник (збереження в TXT/JSON)
  • Читайте дані з CSV та робіть аналіз
  • Напишіть калькулятор, який обробляє неправильний ввід
  • Джерела: офіційна документація Python (io, exceptions), Real Python

З цим посібником ви повністю опануєте роботу з файлами та винятками.
2026 року писати надійні Python-скрипти без цих знань неможливо!