0

我想用 Sentry+Raven 检测独立 Python 脚本中的错误。
我试图配置它并且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 中看到的只是

无用的信息

这是完全没用的。

我怎样才能改变它以获得正常的回溯?

4

1 回答 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.

我强烈建议不要这样做,虽然你不知道它可能有什么其他副作用。

于 2014-09-02T10:14:53.850 回答