Непопулярное мнение: Не совсем.
Поймайте все ошибки, которые вы можете существенно исправить. Иногда это все из них.
По моему опыту, более важно , где исключение, из которого фактически выдается исключение. Если вы храните свои исключения в узком кругу, вы обычно не будете глотать что-либо, что в противном случае было бы полезно. Большая часть информации, закодированной в типе ошибки, является вспомогательной информацией, так что вы все равно в конечном итоге фактически поймаете все из них (но теперь вам нужно искать документы API, чтобы получить полный набор возможных Исключения).
Имейте в виду, что некоторые исключения, которые должны всплывать вверх почти в каждом случае, такие как Python KeyboardInterrupt
и SystemExit
. К счастью для Python, они хранятся в отдельной ветви иерархии исключений, поэтому вы можете позволить им всплыть, поймав Exception
. Хорошо продуманная иерархия исключений делает этот тип вещей действительно простым.
Основное время обнаружения общих исключений будет вызывать серьезные проблемы, когда имеешь дело с ресурсами, которые необходимо очистить (возможно, в предложении finally
), поскольку универсальный обработчик может легко пропустить подобные вещи. К счастью, это не проблема для языков с defer
, таких конструкций, как Python with
или RAII в C ++ и Rust.