【发布时间】:2013-01-07 00:30:55
【问题描述】:
当处理程序中遇到异常时,如何使 Django 信号处理程序不会静默失败?
在使用开发服务器时是否有记录所有这些错误的地方?
为什么 django 信号处理程序无论如何都会默默地失败?这不是违反Python 之禅中的一句话吗?
Zen of Python 明确指出...
错误不应该默默地过去。
这使它们成为调试的噩梦。你所看到的只是信号没有被触发......
我找到了this 问题,但答案对我来说毫无用处,因为它对问题非常具体(答案建议使用 pyflakes,我已经使用 pydev,它可以进行令人满意的静态分析)
【问题讨论】:
-
如果你的回调函数内部的错误无声无息地失败,你为什么不对你的回调函数进行单元测试呢?所有回调参数都可以轻松模拟,以确保您的回调函数没有错误
-
你能做一个测试用例来重现这个吗?我发现我从开发服务器获得了以下信息:pastie.org/private/tqd11vmhxvwgpxu65kixg
-
@dm03514 单元测试将是要走的路......但我更喜欢如果可以让信号处理程序抛出异常,这样即使在编写单元测试时忽略了一些容易出错的情况,它也很容易检测到...
-
如果您希望信号不会静默失败,如果它是自定义信号,您可以使用 send_robust instead() of send()。 docs.djangoproject.com/en/dev/topics/signals/…
-
答案“写单元测试”不是一个好的解决方案。如果单元测试由于异常被静默忽略而失败,您可能会浪费数小时来查找错误。
标签: python django error-handling