← Все вопросы

Какие исключения в Python вы ловите чаще всего и как обрабатываете?

Задан 2 месяца назад26 просмотров2 ответа
0

Приведите пример блока try/except из своего кода. Какие ошибки вы отлавливаете конкретно (ValueError, TypeError, FileNotFoundError)? Используете ли вы конструкцию else и finally?

2 ответа

2

Поддержу последний абзац и усилю: голый except: ловит вообще всё, даже Ctrl+C — он перехватывает BaseException, а не только Exception. Не знаете, что прилетит — пишите хотя бы except Exception as e: и логируйте e, а не pass. Молчаливый except: pass — самый дорогой антипаттерн новичка: программа «работает», а почему результат кривой, выяснится через неделю.

1

Топ по частоте у меня такой: ValueError — всё, что связано с вводом и конвертацией (int('abc')), FileNotFoundError — файла нет там, где обещали, KeyError — в данных не оказалось поля, которое «всегда есть».

Кусок из живого скрипта:

try:
    with open(path, encoding='utf-8') as f:
        data = json.load(f)
except FileNotFoundError:
    print(f'нет файла {path}, пропускаю')
    data = None
except json.JSONDecodeError as e:
    print(f'битый json: {e}')
    data = None

else использую редко, finally — почти никогда: его главную работу, закрыть ресурс, давно делает with.

Единственное железное правило — не писать голый except: без типа. Он глотает всё подряд, включая опечатки в соседнем коде, и превращает отладку в спиритический сеанс.

Ваш ответ

, чтобы ответить на вопрос.