django信号:默默地失败?有没有更好的调试方法?

时间:2012-03-01 05:54:07

标签: django django-signals

似乎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 stdout中没有得到任何有用的错误消息或调试信息。

是否有一种很好的方法可以确保信号失败/错误信息显得清晰明确?

在上面的示例中,如果有正确的错误消息告诉我

,这可能是“5分钟”的修复
name "sender" is not defined

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

欢迎任何建议!

1 个答案:

答案 0 :(得分:1)

不完全符合您的要求,但您的问题也可以通过静态分析器解决,例如pyflakes

来自pypi:

  

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

示例输出:

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

我已将它集成到我的编辑器中(vim,但我也在其他几个版本中看到过它),突显我的错误,或者保存。