为什么fail_silently没有捕获异常?它捕获了哪些例外?

时间:2015-02-25 17:05:58

标签: django

不知何故,使用django 1.7和默认的电子邮件后端,我收到一个错误:111 Connection Refused。即使fail_silently参数为True,也会将其作为异常触发。

这条线是这样的:

    return send_mail(subject=u"Bienvenido a Mi CNT!",
                     message=render_to_string('micnt/mail.welcome.txt', context),
                     from_email=settings.DEFAULT_FROM_EMAIL,
                     recipient_list=[email_address],
                     fail_silently=True,
                     html_message=render_to_string('micnt/mail.welcome.html', context))

我知道如何解决这个问题(我忘了配置某些参数)。但是,有些情况下,异常可能是由于其他原因(例如我正确指定了邮件参数,但服务器已关闭)。

为什么fail_silently无效?什么是"范围" fail_silently的? (即它覆盖了哪些错误,以及哪些错误会传递给调用者?)。

我想正确地覆盖例外而不必:

try:
    return send_mail(...)
except Exception as e:
    # I want to understand what exception types will be triggered here.
    pass

1 个答案:

答案 0 :(得分:1)

fail_silently尝试连接到电子邮件服务器(执行SMTPException)时,

send_mail将仅捕获get_connection

我喜欢把这样的问题作为研究django源代码的机会,其中包含所有答案:

https://github.com/django/django/blob/master/django/core/mail/backends/smtp.py#L69