Потому что это ужасно неспецифично, и это не позволяет вам делать что-либо интересное с исключением. Более того, если вы ловите каждое исключение, может быть множество исключений, которые происходят, которых вы даже не знаете, что происходит (что может привести к сбою вашего приложения, если вы действительно не знаете почему). Вы должны быть в состоянии предсказать (либо через документацию по чтению, либо экспериментировать), какие именно исключения вы должны обрабатывать и как их обрабатывать, но если вы слепо подавляете все из них с самого начала, вы никогда не узнаете.
Итак, по популярному запросу, вот пример. Программист пишет код Python, и она получает IOError
. Вместо того, чтобы исследовать дальше, она решает поймать все исключения:
def foo():
try:
f = open("file.txt")
lines = f.readlines()
return lines[0]
except:
return None
Она не понимает этого вопроса в своих отношениях: что делать, если файл существует и доступен, но он пуст? Тогда этот код поднимет IndexError
(так как список lines
пуст). Поэтому она будет часами задаваться вопросом, почему она возвращает None
из этой функции, когда файл существует и не заблокирован, не осознавая того, что было бы очевидно, если бы она была более конкретной в обнаружении ошибок, а именно, что она обращается к данным, которые могут не быть существовать.
Должен поймать их всех – jamylak
я предполагаю, что это лучше, чтобы поймать все в коде производства, но, как программное обеспечение разрабатывается, это может сделать код трудным для отладки .... –
@jamylak: HTTP: //stephenvick.wordpress.com/2010/08/02/pokemon-exception-handling/ –