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

时间:2014-01-28 19:05:25

标签: python django

我喜欢这个:

try:
    #bunch of code
except:
    return HttpResponse....

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

3 个答案:

答案 0 :(得分:6)

你可以做这样的事情

import traceback 
from django.http import HttpReponse

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

答案 1 :(得分:3)

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

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

并将其放在settings.py中的MIDDLEWARE_CLASSES元组的第一位。

来自中间件process_exception文档:

  

当视图引发异常时,Django会调用process_exception()。   process_exception()应返回NoneHttpResponse   宾语。如果它返回HttpResponse对象,则返回模板响应   将应用响应中间件,以及由此产生的响应   返回浏览器。否则,默认的异常处理会踢   英寸

答案 2 :(得分:2)

您可能希望启用所有例外How do you log server errors on django sites

的记录

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

并且您还应该在Web服务器级别(apache / nginx)创建一个500错误页面,以防万一框架不起作用。

通过这种方式,您可以“捕获”所有错误,并向客户端显示一条很好的错误消息。