【问题标题】:How to get exception in custom handler500?如何在自定义 handler500 中获取异常?
【发布时间】:2021-01-27 19:32:27
【问题描述】:

我正在为错误页面开发自己的模板,但是handler500 没有获取异常参数,我不知道错误的原因是什么。

我该怎么做?我的自定义模板已经在工作,但我需要有关异常原因的信息。我的handler500:

def error_500(request):
    template_name = "error_500.html"
    error_code = "500"
    url = request.build_absolute_uri()
    username = request.user.username
    useruuid = request.user.uuid
    date = datetime.datetime.now()
    errorObject = Errors(
        error_code=error_code, url=url, 
        username=username, useruuid=useruuid,
        date=date
    )
    errorObject.save()
    errorUUID = errorObject.uuid
    context = {
        "errorUUID": errorUUID
    }
    return render(request, template_name, context)

【问题讨论】:

  • 现在可以用了吗?

标签: python python-3.x django django-views django-errors


【解决方案1】:

您可以使用sys.exc_info()

import sys; 

def error_500(request):
    ...
    type_, value, traceback = sys.exc_info()
    ...

来自 Python 文档:

此函数返回一个包含三个值的元组,这些值提供有关当前正在处理的异常的信息。返回的信息特定于当前线程和当前堆栈帧。如果当前堆栈帧未处理异常,则从调用堆栈帧或其调用者获取信息,依此类推,直到找到正在处理异常的堆栈帧。在这里,“处理异常”被定义为“执行一个 except 子句”。对于任何堆栈帧,只能访问有关当前正在处理的异常的信息。

如果堆栈上的任何地方都没有处理异常,则返回一个包含三个 None 值的元组。否则,返回的值为 (type, value, traceback)。

【讨论】:

    猜你喜欢
    • 2012-09-27
    • 1970-01-01
    • 1970-01-01
    • 2021-07-05
    • 2015-06-07
    • 1970-01-01
    • 2018-01-25
    • 2018-11-03
    • 1970-01-01
    相关资源
    最近更新 更多