Джанго сигналы: потерпеть неудачу молча?Есть ли лучший способ отладки ошибок? - PullRequest
2 голосов
/ 01 марта 2012

Кажется, что у сигналов 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», я не получаю никаких полезных сообщений об ошибках или отладочной информации в моем stdout devserver.

Есть ли хороший способ убедиться, что сообщения о сбоях / ошибках отображаются громко и четко?

В моем примере выше, это могло бы быть исправлением "5 минут", если было правильное сообщение об ошибке, сообщающее мне, что

name "sender" is not defined

но вместо этого не было никаких сообщений об ошибках, и я искал повсюду в моей кодовой базе, чтобы попытаться выяснить, почему мои сигналы не вызывают ... не круто.

Любой совет приветствуется!

1 Ответ

1 голос
/ 01 марта 2012

Не совсем то, что вы просите, но вашу проблему также можно решить с помощью статического анализатора, такого как pyflakes .

Из pypi:

Pyflakes - программа для анализа программ на Python и выявления различных ошибок. Он работает, анализируя исходный файл, а не импортируя его, поэтому его безопасно использовать на модулях с побочными эффектами. Это также намного быстрее.

пример вывода:

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

Я интегрировал его в мой редактор (vim, но я также видел его в нескольких других), выделяя мои опечатки по ходу или при сохранении.

...