Python 当必须返回值时,如何保留stacktrace?

Python 当必须返回值时,如何保留stacktrace?,python,django,Python,Django,对于一个web应用程序,我有一个方法get\u stuff\u For\u payment,它会引发PermissionDenied,Django会为用户生成一个HTTP403 我现在被要求显示一个友好的错误页面,而不是一般的403。下面的代码可以实现这一点。但在执行此操作时,如何保留堆栈跟踪 try: stuff = get_stuff_for_payment(id) except PermissionDenied: return render(

对于一个web应用程序,我有一个方法
get\u stuff\u For\u payment
,它会引发
PermissionDenied
,Django会为用户生成一个
HTTP403

我现在被要求显示一个友好的错误页面,而不是一般的403。下面的代码可以实现这一点。但在执行此操作时,如何保留堆栈跟踪

    try:
        stuff = get_stuff_for_payment(id)
    except PermissionDenied:
        return render(request, 'friendly_error_page.html', context)

如果您只想记录它,那么就这样做。该方法将记录消息并自动追加回溯:

except PermissionDenied as err:
    logger.exception('Permission was denied: %s', err)

用python跟踪自定义模板上的错误

except PermissionDenied:
        return render(request, 'friendly_error_page.html', context)
在django gor中,这不是处理403、4xx或5xx错误的好方法

如果我们想在ur模板(403.html)上显示生成的异常,那么我们可以编写您自己的403视图,捕获异常并将其传递给您的403模板

步骤: #.在views.py中: #。在Main url.py中: 如果要向用户显示stacktrace,请使用此模板,否则请使用自定义模板

#.在模板(403.html)中:
“保留”stacktrace是什么意思?你想用它做什么?实际上只是为了记录。
 import sys,traceback

    def custom_403(request):
    t = loader.get_template('403.html')
    logger.info("custom msg",sys.exc_info()) // for traceback
    type, value, tb = sys.exc_info()
    return HttpResponseServerError(t.render(Context({
    'exception_value': value,
    'value':type,
    'tb':traceback.format_exception(type, value,
                                          tb)
},RequestContext(request))))
 from django.conf.urls.defaults import *
    handler403 = 'Project.web.services.views.custom_403'
{{ exception_value }}{{value}}{{tb}}