2011-02-03 2 views
4

Я работаю над проектом Джанго, который имеет большой прибор, который не делает нагрузки:Как добавить pdb к неудачным сценариям Python?

$ python manage.py loaddata apps/mainsite/fixtures/test_auctions.json 
/Users/cp/bidsite/.ve/lib/python2.6/site-packages/django/db/models/fields/subclassing.py:80: DeprecationWarning: A Field class whose get_db_prep_save method hasn't been updated to take a `connection` argument. 
    new_class = super(SubfieldBase, cls).__new__(cls, name, bases, attrs) 
/Users/cp/bidsite/.ve/lib/python2.6/site-packages/django/db/models/fields/subclassing.py:80: DeprecationWarning: A Field class whose get_db_prep_lookup method hasn't been updated to take `connection` and `prepared` arguments. 
    new_class = super(SubfieldBase, cls).__new__(cls, name, bases, attrs) 
/Users/cp/bidsite/.ve/lib/python2.6/site-packages/celery/task/schedules.py:5: DeprecationWarning: celery.task.schedules is deprecated and renamed to celery.schedules 
    "celery.task.schedules is deprecated and renamed to celery.schedules")) 
Problem installing fixture 'apps/mainsite/fixtures/test_auctions.json': Traceback (most recent call last): 
    File "/Users/cp/bidsite/.ve/lib/python2.6/site-packages/django/core/management/commands/loaddata.py", line 174, in handle 
    obj.save(using=using) 
    File "/Users/cp/bidsite/.ve/lib/python2.6/site-packages/django/core/serializers/base.py", line 165, in save 
    models.Model.save_base(self.object, using=using, raw=True) 
    File "/Users/cp/bidsite/.ve/lib/python2.6/site-packages/django/db/models/base.py", line 570, in save_base 
    created=(not record_exists), raw=raw, using=using) 
    File "/Users/cp/bidsite/.ve/lib/python2.6/site-packages/django/dispatch/dispatcher.py", line 172, in send 
    response = receiver(signal=self, sender=sender, **named) 
    File "/Users/cp/bidsite/apps/mainsite/models.py", line 257, in update_auction_details 
    auction_json = instance.as_json() 
    File "/Users/cp/bidsite/apps/mainsite/models.py", line 1110, in as_json 
    'product': self.product.as_json(), 
    File "/Users/cp/bidsite/.ve/lib/python2.6/site-packages/django/db/models/fields/related.py", line 315, in __get__ 
    rel_obj = QuerySet(self.field.rel.to).using(db).get(**params) 
    File "/Users/cp/bidsite/.ve/lib/python2.6/site-packages/django/db/models/query.py", line 349, in get 
    % self.model._meta.object_name) 
DoesNotExist: Product matching query does not exist. 

Проблема заключается в том, что StackTrace не дает мне ключ к пониманию того, что линия на арматуре вызывает эту ошибку. Как я могу отладить это? Единственное, что я могу придумать, это функция ipythgon, где всякий раз, когда вы что-то выполняете и возникает исключение, ipython автоматически вводит подсказку pdb, чтобы вы могли приблизиться, чтобы выяснить, что произошло. Как я могу это сделать с этим? Есть ли переключатель командной строки для python, который это делает? Что я могу сделать здесь, чтобы отладить это?

ответ

6

Это Python Рецепт будет установить отладчик, который начинается на неперехваченных исключениях:

http://code.activestate.com/recipes/65287-automatically-start-the-debugger-on-an-exception/

Суть его заключается в установке уды исключения в sys.excepthook, который вызывает pdb.pm() при вызове (хотя это немного сложнее, чем это).

+0

+1 cool adam! Спасибо, что поделился. Закладка для, когда я вытягиваю свои волосы в будущем. Надеюсь, я это помню. –

 Смежные вопросы

  • Нет связанных вопросов^_^