Python3错误处理同时运行try和except
我试图在Python 3脚本中实现错误处理,方法是让SMTPlib库在遇到这样的错误时发送电子邮件Python3错误处理同时运行try和except,python,python-3.x,Python,Python 3.x,我试图在Python 3脚本中实现错误处理,方法是让SMTPlib库在遇到这样的错误时发送电子邮件 if value.isdigit() : print ("Value is an integer") else : try: server = smtplib.SMTP(email_server, email_port) server.ehlo() server.starttls() server.login(emai
if value.isdigit() :
print ("Value is an integer")
else :
try:
server = smtplib.SMTP(email_server, email_port)
server.ehlo()
server.starttls()
server.login(email_login, email_pass)
server.sendmail("me@example.com", "me@example.com", message)
server.close()
sys.exit()
except:
print ("Error - Was unable to send email")
sys.exit()
如果该值为整数,则此操作正常,但如果不是整数,则会正确发送电子邮件,但错误消息也会打印到屏幕上
为什么我的脚本也运行except部分?
sys.exit
通过引发异常来实现。当在server.close
之后调用sys.exit
时,捕捉到SystemExit
异常
这里有一个小证据:
import sys
try:
print("hello")
sys.exit()
except:
print("exception!")
未遵守异常处理的基本规则。至少应使用
,例外情况除外:
。更好的除了异常作为错误:
记录或打印错误。最好的方法是只处理由try/except
保护的SMTP事务产生的异常。在异常处理代码中添加对traceback.print_exc()
的调用,以查明引发了什么异常(这就是为什么要执行except部分)。从中猜测您可能指的是server.quit()
而不是server.close()
?您可能正在从sys.exit
捕获SystemExit
异常,我甚至需要sys.exit吗?它已经到达一个except的事实是否意味着程序无论如何都会终止?@fightstarr20sys.exit()
不管是否有异常,你都在做一个sys.exit()
,为什么不把它带到try…except…
循环之外?@fightstarr20sys.exit()
最好与错误代码一起使用,0表示成功,非零表示故障。这对于脚本中的使用非常有用。