【问题标题】:'AssertionError' object has no attribute 'message''AssertionError' 对象没有属性 'message'
【发布时间】:2021-09-01 09:21:02
【问题描述】:

我正在处理 django 中的表单,一旦填写完毕,就会向用户发送一封电子邮件,但我收到以下错误:

error image

我已经检查了我的代码,我的问题来自这个函数:

def send_manually_exception_email(request, e):
  exc_info = sys.exc_info()
  reporter = ExceptionReporter(request, is_email=True, *exc_info)
  subject = e.message.replace('\n', '\\n').replace('\r', '\\r')[:989]
  message = "%s\n\n%s" % (
    '\n'.join(traceback.format_exception(*exc_info)),
    reporter.filter.get_request_repr(request)
  )
  mail.mail_admins(subject, message, fail_silently=True, html_message=reporter.get_traceback_html())

我能做什么?

【问题讨论】:

  • e.message 本身是否存在。

标签: python-3.x django email django-forms django-oscar


【解决方案1】:

虽然比崩溃要好,但 OP 可能不想生成带有空白主题行的电子邮件。您可以只使用错误的字符串表示,例如:

print(e)
print(f'Function x gave error {e}')

在 OP 的代码中,设置可能就足够了:

subject = str(e)

如果错误没有消息,则使用此替代方法:

subject = getattr(e, 'message', str(e)).replace('\n', '\\n').replace('\r', '\\r')[:989]

【讨论】:

    【解决方案2】:

    异常对象e确实本身具有message属性。例如,如果有这样的属性,您可以检索它,如果没有 getattr(…) [python-doc] 的此类属性,则使用空字符串:

    def send_manually_exception_email(request, e):
      exc_info = sys.exc_info()
      reporter = ExceptionReporter(request, is_email=True, *exc_info)
      subject = getattr(e, 'message', '').replace('\n', '\\n').replace('\r', '\\r')[:989]
      message = "%s\n\n%s" % (
        '\n'.join(traceback.format_exception(*exc_info)),
        reporter.filter.get_request_repr(request)
      )
      mail.mail_admins(subject, message, fail_silently=True, html_message=reporter.get_traceback_html())

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-09
      • 2023-02-01
      • 2021-02-03
      • 2022-12-09
      • 1970-01-01
      • 2018-05-23
      • 1970-01-01
      • 2020-07-11
      相关资源
      最近更新 更多