如何在python和打印堆栈跟踪中捕获任何异常(DJANGO)

mil*_*c88 4 python django

我喜欢这个:

try:
    #bunch of code
except:
    return HttpResponse....
Run Code Online (Sandbox Code Playgroud)

我想向客户端发送错误并在控制台上打印堆栈跟踪.我怎样才能做到这一点?

Ser*_*eim 6

你可以做这样的事情

import traceback 
from django.http import HttpReponse

def view(request):
     try:
          #throw exception
     except:
         tb = traceback.format_exc()
         return HttpResponse(tb)
    # normal flow
Run Code Online (Sandbox Code Playgroud)


ndp*_*dpu 5

您可以创建一个自定义中间件类,您可以在其中捕获所有异常:

class ErrorMiddleware(object):
    def process_exception(self, request, exception):
        # send error
        return HttpResponse(...) # or None
Run Code Online (Sandbox Code Playgroud)

并将其放在MIDDLEWARE_CLASSESsettings.py 中元组的第一个位置。

来自中间件process_exception文档:

Djangoprocess_exception()在视图引发异常时调用。 process_exception()应该返回一个None或一个HttpResponse 对象。如果它返回一个HttpResponse对象,将应用模板响应和响应中间件,并将结果响应返回给浏览器。否则,将启动默认异常处理。


jpe*_*lli 2

您可能想要启用所有异常的日志记录如何在 django 站点上记录服务器错误

并制作自定义 500 django 错误页面https://docs.djangoproject.com/en/dev/topics/http/views/#the-500-server-error-view

并且您还应该在 Web 服务器级别(apache / nginx)创建 500 错误页面,以防框架无法工作。

这样您就可以“捕获”所有错误并向客户端显示一条不错的错误消息。