Python 当必须返回值时,如何保留stacktrace?
对于一个web应用程序,我有一个方法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(
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}}