Python3错误处理同时运行try和except

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

我试图在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(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的事实是否意味着程序无论如何都会终止?@fightstarr20
sys.exit()
不管是否有异常,你都在做一个
sys.exit()
,为什么不把它带到
try…except…
循环之外?@fightstarr20
sys.exit()
最好与错误代码一起使用,0表示成功,非零表示故障。这对于脚本中的使用非常有用。