【发布时间】:2017-04-24 10:45:18
【问题描述】:
我可以看到关于 try - catch 的几个主题,但似乎没有讨论最终阻塞本身的错误。我发现如果它在 finally 块中,则不会处理错误。最终管理的理想方式是什么?
例如。下面是一个邮件功能。如果 try 块中有任何错误,finally 将执行 quit 方法,该方法本身未启动,因此会发生未处理的错误。那么确保 finally 块中没有错误会更好吗?
def send_email(ldap, email_address, password, msg):
try:
message = MIMEMultipart('alternative')
message['To'] = email.utils.formataddr(('Recipient', '%s@abc.com'%email_address))
message['From'] = email.utils.formataddr(('Author', '%s@abc.com'%email_address))
message['Subject'] = 'Sample subject'
text = "%s"%msg
html = MIMEText('<html><head></head><h2>data</h2><body><p>%s</p></body></html>'%msg,'html')
message.attach(html)
server = smtplib.SMTP(host="ip",port=0)
server.set_debuglevel(True)
# identify ourselves, prompting server for supported features
server.ehlo()
if server.has_extn('STARTTLS'):
server.starttls()
server.ehlo()
server.login(ldap, password)
print "%s@abc.com, %s@abc.com, %s "%(email_address,email_address,message.as_string())
server.sendmail('%s@abc.com'%email_address, "%s@abc.com"%email_address, message.as_string())
finally:
server.quit()
【问题讨论】:
-
你为什么不能把它换成另一个
try? -
我可以。只是想知道这是否是正确的方法。
-
不是。正确的做法是避免将整个函数包装在 try 块中。
-
为了扩展 bruno 的答案,你想用这个 'try:' 块来实现什么?它似乎没有增加任何价值。想一想可能出错的各种事情以及如果它们出错你希望发生什么,然后使用 try/except/finally 来实现所需的行为。并非所有代码都需要包含在异常处理中。顺便说一句,异常处理并不是真正用于调试,而是用于对应用程序使用时出现的问题做出适当的响应。
标签: python exception exception-handling try-catch