Обработка ошибок ввода и отсутствия файла
Содержание курса
Перехват FileNotFoundError при чтении файла
Теперь посмотрим, как это выглядит на практике. Задача простая: открыть файл на чтение, но сделать это так, чтобы программа не падала, если файла нет.
Конструкция with open(...) as f уже знакома — она сама закрывает файл по выходу из блока. Здесь она остаётся без изменений, только оборачивается в try:
try:
with open('data.txt', 'r', encoding='utf-8') as f:
content = f.read()
print('Файл прочитан, символов:', len(content))
except FileNotFoundError:
print('Ошибка: файл data.txt не найден')
Что здесь происходит: open('data.txt', 'r', ...) — это та самая «опасная» строка. Если data.txt отсутствует на диске, Python не доберётся до f.read() — исключение возникнет уже при вызове open(). Блок except FileNotFoundError: ловит именно этот момент и выводит понятное сообщение вместо трейсбэка.
Обратите внимание: print с длиной контента стоит внутри try, после with-блока. Это правильно — он выполнится только если файл открылся успешно. Если бы он стоял после всего try-except, он выполнялся бы даже при ошибке, что было бы логически некорректно.
Ещё один момент: except FileNotFoundError: не перехватывает другие ошибки файловой системы — например, PermissionError (когда файл есть, но нет прав на чтение). Это нормально: мы перехватываем ровно ту ситуацию, которую ожидаем и умеем обработать. Всё остальное пусть всплывает как обычно.
