№ п.п. Python является то, что явно лучше, чем неявное. Большинство функций Python, которые являются , ожидали, чтобы регулярно генерировать исключения, например dict .__ getitem__, предоставлять эквивалентные версии, которые возвращают значение по умолчанию, например dict.get.
Я использовал новое с контекстами для чего-то подобного раньше; код выглядел так:
with ignoring(IOError, OSError):
# some non-critical file operations
Но мне тоже ничего не нужно было возвращать. Как правило, уровень всей функции - это плохое место для этого, и, используя декораторы, вы блокируете любую возможность при получении ошибки, если хотите, чтобы вы ее обработали более грациозно в другом месте.
Также, except:
чрезвычайно опасен; вы, вероятно, имеете в виду (по крайней мере) except Exception:
и, вероятно, что-то еще более плотное, например IOError или KeyError. В противном случае вы также поймаете такие вещи, как Ctrl-C, SystemExit и имена с ошибками.
Вы понимаете, что ['кроме:' часто злой] (http://docs.python.org/howto/doanddont.html#except)? Вы, возможно, не хотите, чтобы такая функция проглатывала синтаксические ошибки ... – delnan
@delnan: Пожалуйста, прекратите увековечить миф о том, что кроме: блоков СинтаксисErrors. Если вы не динамически компилируете код (или сначала импортируете модуль внутри этого блока, что то же самое), это не так. Он блокирует достаточно реальных проблем, которые нам не нужно прибегать к гиперболе о том, насколько это плохо. –
@ Joe: D'oh! Конечно, он не проглатывает SyntaxError, извините за дезинформацию. – delnan