似乎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
但相反,没有任何错误消息,我在我的代码库中无处不在,试图找出为什么我的信号没有被调用...不酷。
欢迎任何建议!
答案 0 :(得分:1)
不完全符合您的要求,但您的问题也可以通过静态分析器解决,例如pyflakes。
来自pypi:
Pyflakes是分析Python程序和检测各种错误的程序。它通过解析源文件而不是导入它来工作,因此可以安全地在具有副作用的模块上使用。它也快得多。
示例输出:
tmp.py:9: 'ContentFile' imported but unused
tmp.py:13: undefined name 'sender'
我已将它集成到我的编辑器中(vim,但我也在其他几个版本中看到过它),突显我的错误,或者保存。