Вопрос по exception, exception-handling, python – Плохая идея перехватывать все исключения в Python

7

Почему плохая идея перехватывать все исключения в Python?

Я понимаю, что перехват всех исключений с использованиемexcept: пункт будет даже поймать «специальные» Python исключения:SystemExit, KeyboardInterrupt, а такжеGeneratorExit, Так почему бы просто не использоватьexcept Exception: пункт, чтобы поймать все исключения?

@ VineetMenon Я бы сказал, что в рабочем коде вы должны были достаточно протестировать, чтобы знать обо всех конкретных исключениях, которые могут возникнуть, и правильно обрабатывать их все. Rafe Kettler
Должен поймать их всех jamylak
Полагаю, лучше всего поймать все в рабочем коде, но по мере разработки программного обеспечения это может затруднить отладку кода .... Vineet Menon

Ваш Ответ

2   ответа
3

вероятно, хотите обрабатывать каждое исключение по-разному. Это не то же самое, что иметь KeyInterrupt, чем иметь проблему с кодировкой или операционную систему ... Вы можете ловить определенные исключения одно за другим.

try:
    XXX
except TYPE:
    YYY
except TYPE:
    ZZZ
21

тересное за исключением. Более того, если вы перехватываете каждое исключение, может произойти множество исключений, о которых вы даже не подозреваете (что может привести к сбою приложения, в котором вы не знаете, почему). Вы должны быть в состоянии предсказать (либо путем чтения документации, либо путем экспериментов), в частности, какие исключения вам нужно обработать и как с ними обращаться, но если вы слепо подавляете их все с самого начала, вы никогда не узнаете.

Так вот, по популярному запросу, вот пример. Программист пишет код Python, и она получаетIOError. Вместо дальнейшего расследования она решает отловить все исключения:

def foo():
    try:
        f = open("file.txt")
        lines = f.readlines()
        return lines[0]
    except:
        return None

Она не понимает проблему своими способами: что, если файл существует и доступен, но он пуст? Тогда этот код подниметIndexError (так как списокlines пустой). Так что она будет часами интересоваться, почему она получаетNone вернитесь из этой функции, когда файл существует и не заблокирован без осознания чего-либо, что было бы очевидно, если бы она была более точна в обнаружении ошибок, а именно в том, что она обращается к данным, которые могут не существовать.

@ Bandicoot конкретные примеры того, почему ловить все исключения - плохая идея? Rafe Kettler
Большое спасибо Bandicoot
@ Raffe: Да. Поможет мне лучше понять ваш ответ. Благодарность Bandicoot
@ Bandicoot обновлен. По сути, идея заключается в том, что исключения - это инструмент отладки, который вы выбрасываете, когда отлавливаете их все, независимо от того, что они на самом деле. Rafe Kettler
@ Raffe: Можете ли вы привести конкретные примеры, пожалуйста? Bandicoot

Похожие вопросы