Sentry只显示<unknown>:None错误
我想在一个独立的Python脚本中使用Sentry和Raven来检测错误。
我尝试配置它,发现raven test ...
可以正常工作。
然后我把这段代码放在脚本的最上面:
from raven import Client
client = Client('http://...@.../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中我看到的都是:
这完全没有用。
我该怎么做才能看到正常的错误追踪信息呢?
1 个回答
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
没错,但有没有办法在不使用 try-except 包裹代码块的情况下捕获异常呢?我在终端能看到错误,那我能在 Sentry 里看到吗?
有一个默认的异常处理器,当异常没有被捕获时,这个默认处理器会接管并显示这个异常。这就是你在终端看到的内容。
生成这个输出的函数是 sys.excepthook
,默认情况下它会输出到 stderr
。
所以,如果你想全局捕获 所有 异常,你需要创建一个全局异常处理器,或者把你自己的函数映射到 sys.excepthook
。
不过,我强烈建议不要这样做,因为你不知道这样做会带来什么其他副作用。