2014-09-02 1 views
0

Я хочу обнаружить ошибки в автономном скрипте Python с Sentry + Raven.
Я попытался настроить его, и raven test ... работает.
Тогда я помещаю это на верхней части сценария:Sentry показывает только <unknown>: Отсутствует ошибка

from raven import Client 
client = Client('http://[email protected]/1') 
client.captureException() 

исключение генерируется позже на этом:

import django 
django.setup() 
from django.conf import settings 

И я хочу, чтобы увидеть фактический стек для этой ошибки:

ImportError: Could not import settings 'settings' (Is it on sys.path? Is there an import error in the settings file?): No module named 'settings' 

Но все, что я вижу в Sentry, является

Useless message

, что совершенно бесполезно.

Как это изменить, чтобы иметь нормальную трассировку?

ответ

3

Вы неправильно понимаете, как работает client.captureException(), а не параметр конфигурации. Вы можете использовать его, когда вы поймать исключение, и он будет захватывать тип исключения и сообщение:

try: 
    f = open('oogah-boogah.txt') 
except IOError: 
    client.captureException() 
    # do something here 

Для захвата каких-либо исключений, которые могут быть сгенерированы в блоке кода, вы можете использовать capture_exceptions:

@client.capture_exceptions 
def load_django(): 
    import django 
    django.setup() 
    from django.conf import settings 

Yes you're right, but is there a way to catch an exception not wrapping a block of code in a try-except. I can see the error in a terminal, can I see it in Sentry?

Существует обработчик исключений по умолчанию - и когда исключение не перехвачено, этот обработчик по умолчанию ловит его, а затем отображает исключение. Это то, что вы видите в терминале.

Функция, которая генерирует этот выход, равна sys.excepthook, и по умолчанию будет выводиться значение stderr.

Итак, для того, чтобы поймать все исключения во всем мире, вы должны создать глобальный обработчик исключений или сопоставить собственную функцию sys.excepthook.

Я бы настоятельно рекомендовал против этого, хотя, как вы не знаете, какие другие побочные эффекты он может иметь.

+0

Да, вы правы, но есть способ поймать исключение, не обертывая блок кода в try-except. Я вижу ошибку в терминале, могу ли я увидеть ее в Sentry? – Sergey