首页 > 解决方案 > Python Web Scraping - 出现错误时的电子邮件通知

问题描述

我已经获得了一些关于 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.' 

这是我应该使用的那种东西吗?如果没有,解决这个问题的最佳方法是什么?

提前致谢。

标签: pythonemailalertsendgrid

解决方案


我的意思是:

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()

但:

来自 Python 的 PEP-8 样式指南

捕获异常时,尽可能提及特定的异常,而不是使用裸的 except: 子句。

一个简单的 except: 子句将捕获 SystemExit 和 KeyboardInterrupt 异常,使使用 Control-C 中断程序变得更加困难,并且可以掩盖其他问题。如果要捕获所有表明程序错误的异常,请使用 except Exception: (bare except 等价于 except BaseException:)。

一个好的经验法则是将裸“除外”子句的使用限制在两种情况下:

如果异常处理程序将打印或记录回溯;至少用户会意识到发生了错误。如果代码需要做一些清理工作,然后让异常通过 raise 向上传播。尝试...终于可以成为处理这种情况的更好方法。


推荐阅读