我已经在Python上获得了一些网络抓取代码,现在需要编写一些代码,这样如果出现错误,它会通过电子邮件通知某人。我在网上找到了这个代码:
def send_email():
to = request.form.get('to')
if not to:
return ('Please provide an email address in the "to" query string '
'parameter.'), 400
sg = sendgrid.SendGridAPIClient(apikey=SENDGRID_API_KEY)
to_email = mail.Email(to)
from_email = mail.Email(SENDGRID_SENDER)
subject = 'This is a test email'
content = mail.Content('text/plain', 'Example message.')
message = mail.Mail(from_email, subject, to_email, content)
response = sg.client.mail.send.post(request_body=message.get())
if response.status_code != 202:
return 'An error occurred: {}'.format(response.body), 500
return 'Email sent.'
这是我应该使用的那种东西吗?如果没有,那么解决这个问题的最佳方法是什么?
提前致谢。
我的意思是:
try:
# Web scrapping code
except requests.packages.urllib3.exceptions.MaxRetryError as e:
print repr(e)
send_email()
要么
使用except
而不指定被动处理。
try:
# Web scrapping code
except:
send_email()
但:
From the PEP-8 Style Guide for Python:
捕获异常时,请尽可能提及特定异常,而不是使用bare except子句。
一个裸的except:子句将捕获SystemExit和KeyboardInterrupt异常,这使得用Control-C中断程序变得更加困难,并且可以掩盖其他问题。如果你想捕获所有发出程序错误信号的异常,请使用除Exception :(裸除了除了BaseException之外)。
一个好的经验法则是将裸“除”子句的使用限制为两种情况:
如果异常处理程序将打印出来或记录回溯;至少用户会意识到发生了错误。如果代码需要做一些清理工作,但随后让异常向上传播并加注。尝试...终于可以更好地处理这种情况。