当处理程序中遇到异常时,如何使Django信号处理程序无法静默?
使用开发服务器时,是否记录了所有这些错误的地方?
为什么django信号处理程序无论如何都会无声地失败?是不是反对 Python的
中的一行?Python的禅 明确说明......
错误绝不应该以无声方式传递。
这使得它们成为调试的噩梦。你只能看到信号没有被解雇......
我发现了this问题,但答案对我来说没用,因为它对问题非常具体(答案建议使用pyflakes,我已经使用pydev进行了令人满意的静态分析)
答案 0 :(得分:4)
使用manage.py shell
时,从示例中手动创建FollowTable时,我会收到未捕获的异常。但是,请求期间未捕获的异常不会显示在终端中(除了显示返回500之外),而是显示在浏览器中。如果您使用JavaScript发出请求,可能需要查看firebug / chrome开发人员工具,看看它是否返回了追溯。
看起来其他人已经回答了如何在控制台中显示回溯: https://stackoverflow.com/a/5886462/725359
似乎为我工作。我做了以下事情:
ExceptionLoggingMiddleware
课程添加到my_app/__init__.py
'my_app.ExceptionLoggingMiddleware'
MIDDLEWARE_CLASSES
添加了settings.py
答案 1 :(得分:2)
是的,我想和你一样:错误永远不会无声地失败
Django的内置信号不会因为使用send()
send_robust()
忽略异常来自send_robust()的文档
send_robust()捕获从Python的Exception类派生的所有错误,并确保所有接收器都收到信号通知。如果发生错误,则会在引发错误的接收器的元组对中返回错误实例。
由于django不使用send_robust()
,请调查它的调用位置。我想这是在您的源代码中,或在第三方应用程序的代码中。