Я искал другие сообщения, так как я чувствовал, что это довольно распространенная проблема, но все остальные вопросы об исключении Python, которые я нашел, не отражают мою проблему.Правильный способ обработки исключений в Python?
Я постараюсь быть таким конкретным, как я могу, поэтому приведу прямой пример. И pleeeeease не публикует обходные пути для этой конкретной проблемы. Меня особо не интересует, как вы можете отправить электронное письмо гораздо лучше с помощью xyz. Я хочу знать, как вы обычно относитесь к зависимым, склонным к ошибкам утверждениям.
Мой вопрос: как правильно обрабатывать исключения, которые зависят друг от друга, что означает: Только если первый шаг был успешным, попробуйте следующий и т. Д. Еще один критерий: все исключения должны быть пойманы, этот код должен быть надежным.
Для вашего рассмотрения, пример:
try:
server = smtplib.SMTP(host) #can throw an exception
except smtplib.socket.gaierror:
#actually it can throw a lot more, this is just an example
pass
else: #only if no exception was thrown we may continue
try:
server.login(username, password)
except SMTPAuthenticationError:
pass # do some stuff here
finally:
#we can only run this when the first try...except was successful
#else this throws an exception itself!
server.quit()
else:
try:
# this is already the 3rd nested try...except
# for such a simple procedure! horrible
server.sendmail(addr, [to], msg.as_string())
return True
except Exception:
return False
finally:
server.quit()
return False
Это выглядит очень unpythonic ко мне, и код обработки ошибок тройная реальный бизнес код, но с другой стороны, как я могу обрабатывать несколько заявлений, которые зависимые друг от друга, значение statement1 является предпосылкой для выражения2 и т. д.?
Я также заинтересован в правильной очистке ресурсов, даже Python может управлять этим для себя.
Спасибо, Том
спасибо за редактирование dbr, но, пожалуйста, не редактируйте то, что вы не уверены в себе. Я отредактировал критерии возврата к критерию, который действительно является единственным, поскольку множественное число не имеет смысла там, где вы его редактировали. – Tom
Opps, извините за это (хм, не думаю, что я когда-либо слышал единство критериев раньше ..) – dbr