【问题标题】:django signals: fail silently? any better way of debugging mistakes?django 信号:静默失败?有什么更好的调试错误的方法吗?
【发布时间】:2012-03-01 05:54:07
【问题描述】:

似乎 django 信号有一个“静默失败”的范例。

当我在信号函数中出现小拼写错误时,例如:-

def new_users_handler(send, user, response, details, **kwargs):
    print "new_users_handler function executes"
    user.is_new = True
    if user.is_new:
        if "id" in response:
            from urllib2 import urlopen, HTTPError
            from django.template.defaultfilters import slugify
            from django.core.files.base import ContentFile

            try:
                url = None
                if sender == FacebookBackend:
                    url = "http://graph.facebook.com/%s/picture?type=large" \
                            % response["id"]
                elif sender == google.GoogleOAuth2Backend and "picture" in response:
                    url = response["picture"]
    ......
    socialauth_registered.connect(new_users_handler, sender=None)

我使用“send”作为参数而不是“sender”,我在 devserver 标准输出中并没有真正得到任何有用的错误消息或调试信息。

是否有确保信号故障/错误消息清晰响亮的好方法?

在我上面的示例中,如果有正确的错误消息告诉我,这可能是“5 分钟”修复

name "sender" is not defined

但是相反,没有任何错误消息,我在代码库中到处寻找,试图找出为什么我的信号没有被调用......不酷。

欢迎任何建议!

【问题讨论】:

标签: django django-signals


【解决方案1】:

不完全符合您的要求,但您的问题也可以使用像 pyflakes 这样的静态分析器来解决。

来自 pypi:

Pyflakes 是用于分析 Python 程序并检测各种错误的程序。它通过解析源文件而不是导入它来工作,因此在具有副作用的模块上使用是安全的。它也快得多。

样本输出:

tmp.py:9: 'ContentFile' imported but unused
tmp.py:13: undefined name 'sender'

我已将它集成到我的编辑器中(vim,但我也曾在其他几个编辑器中看到过它),在运行时或保存时突出显示我的拼写错误。

【讨论】:

  • 这很有用。我也用vim。你试过合成插件吗?我听说它非常好,并且行为方式与 pyflakes 类似。我需要找时间尝试这些 lint 插件...
  • -1 解决方案只关注手头的问题...如果信号处理程序引发其他异常怎么办...我仍然不知道应该如何调试我的信号处理程序姜戈..
猜你喜欢
  • 2015-11-03
  • 1970-01-01
  • 2011-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多