'AssertionError' 对象没有属性 'message'

'AssertionError' object has no attribute 'message'

我正在处理 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 属性。例如,如果有这样的属性,您可以检索它,如果没有这样的属性,则使用空字符串 getattr(…) [python-doc]:

def send_manually_exception_email(request, e):
  exc_info = sys.exc_info()
  reporter = ExceptionReporter(request, is_email=True, *exc_info)
  subject = <b>getattr(</b>e<b>, 'message', '')</b>.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())

虽然总比崩溃好,但 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]