尝试和运行

时间:2017-04-03 15:11:31

标签: 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(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部分?

1 个答案:

答案 0 :(得分:4)

sys.exit是通过提出异常来实现的。在sys.exit之后调用server.close时,会捕获SystemExit个异常。

这是一个小证据:

import sys 

try:
  print("hello")
  sys.exit()
except:
  print("exception!")

未遵守异常处理的基本规则。应该至少使用except Exception:。记录或打印except Exception as err:时更好err。最好的方法是只处理源自try/except守护的SMTP事务的异常。