我喜欢这个:
try:
#bunch of code
except:
return HttpResponse....
我想向客户端发送错误并在控制台上打印堆栈跟踪。我怎么能这样做?
答案 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()
应返回None
或HttpResponse
宾语。如果它返回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错误页面,以防万一框架不起作用。
通过这种方式,您可以“捕获”所有错误,并向客户端显示一条很好的错误消息。