Я не прошу личных "религиозных" мнений об этой философии, а немного более технических.
Я понимаю, что эта фраза является одним из нескольких тестов лакмусовой бумажки, чтобы узнать, является ли ваш код "pythonic". Но для меня pythonic означает чистый, простой и интуитивно понятный, не загруженный обработчиками исключений для плохого кодирования.
Итак, практический пример. Я определяю класс:
class foo(object):
bar = None
def __init__(self):
# a million lines of code
self.bar = "Spike is my favorite vampire."
# a million more lines of code
Теперь, исходя из процедурного фона, в другой функции я хочу сделать это:
if foo.bar:
# do stuff
Я получаю исключение атрибута, если я был нетерпелив и не делал начального foo = None. Итак, "просить прощения не разрешение" предполагает, что я должен сделать это вместо этого?
try:
if foo.bar:
# do stuff
except:
# this runs because my other code was sloppy?
Почему мне было бы лучше добавить дополнительную логику в блок try, чтобы я мог оставить определение класса более неоднозначным? Почему бы не определить все изначально, прежде чем явно предоставить разрешение?
(Не бить меня о том, как использовать try/except blocks... Я использую их везде. Я просто не думаю, что правильно использовать их, чтобы поймать собственные ошибки, потому что я не был программистом.
Или... я полностью неправильно понимаю мантру "Спроси мужа"?