Статьи

Учебные материалы по языку Python — от основ до продвинутых тем

Файлы и исключения

Страница 12 из 34 · 2026-10-26 · 2 мин чтения

Работа с файлами

with open("data.txt", "w", encoding="utf-8") as f:    f.write("первая строка\n")    f.write("вторая строка\n")with open("data.txt", "r", encoding="utf-8") as f:    content = f.read()    print(content)

Всегда указывайте encoding явно — кодировка по умолчанию зависит от системы.

Режимы открытия

РежимОписание
rЧтение (по умолчанию)
wЗапись, файл очищается
aДописывание в конец
xСоздание, ошибка если файл существует
bБинарный режим, например rb

Чтение по строкам

with open("data.txt", encoding="utf-8") as f:    for line in f:        print(line.rstrip())with open("data.txt", encoding="utf-8") as f:    lines = f.readlines()

Построчный перебор не загружает файл целиком в память.

Бинарные файлы

with open("image.png", "rb") as f:    header = f.read(8)    print(header)

Модуль pathlib

from pathlib import Pathpath = Path("folder") / "data.txt"path.parent.mkdir(exist_ok=True)path.write_text("текст", encoding="utf-8")print(path.read_text(encoding="utf-8"))print(path.exists())print(path.suffix)print(path.stem)for item in Path(".").glob("*.py"):    print(item.name)

JSON

import jsondata = {"name": "Anna", "scores": [5, 4, 5]}with open("data.json", "w", encoding="utf-8") as f:    json.dump(data, f, ensure_ascii=False, indent=2)with open("data.json", encoding="utf-8") as f:    loaded = json.load(f)text = json.dumps(data)back = json.loads(text)

Исключения

Ошибки времени выполнения представлены исключениями:

try:    value = int(input("Число: "))    print(10 / value)except ValueError:    print("Это не число")except ZeroDivisionError:    print("Деление на ноль")else:    print("Ошибок не было")finally:    print("Выполняется всегда")

Можно перехватывать несколько типов и получать сам объект исключения:

try:    open("missing.txt")except (FileNotFoundError, PermissionError) as e:    print(type(e).__name__, e)

Не используйте голый except: — он перехватывает даже KeyboardInterrupt. Если нужен общий перехват, пишите except Exception.

Генерация исключений

def set_age(age):    if age < 0:        raise ValueError("возраст не может быть отрицательным")    return age

Пользовательские исключения

class ConfigError(Exception):    passclass MissingKeyError(ConfigError):    def __init__(self, key):        super().__init__(f"отсутствует ключ: {key}")        self.key = keytry:    raise MissingKeyError("token")except ConfigError as e:    print(e)

Иерархия

Все исключения наследуются от BaseException. Прикладные ошибки наследуются от Exception. Часто встречаются: ValueError, TypeError, KeyError, IndexError, AttributeError, OSError.

Контекстные менеджеры

Конструкция with гарантирует освобождение ресурсов. Свой менеджер можно написать через contextlib:

from contextlib import contextmanager@contextmanagerdef opened(name):    f = open(name, encoding="utf-8")    try:        yield f    finally:        f.close()with opened("data.txt") as f:    print(f.read())

Задания

  1. Прочитайте текстовый файл и подсчитайте количество строк и слов.
  2. Напишите функцию, которая безопасно читает JSON-файл и возвращает пустой словарь, если файл отсутствует или повреждён.