代码之家  ›  专栏  ›  技术社区  ›  Sergey

哨兵只显示<unknown>:无错误

  •  0
  • Sergey  · 技术社区  · 10 年前

    我想用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'
    

    但我在哨兵里看到的是

    Useless message

    这是完全无用的。

    我如何将其更改为具有正常的回溯?

    1 回复  |  直到 10 年前
        1
  •  3
  •   Burhan Khalid    10 年前

    你误解了 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
    

    是的,你是对的,但有没有办法捕捉异常 在tryexcept中包装代码块。我可以在 航站楼,我能在哨兵里看到吗?

    有一个默认的异常处理程序,当未捕获到异常时,该默认处理程序将捕获该异常,然后显示该异常。这是你在终端看到的。

    生成此输出的函数是 sys.excepthook 它将输出到 stderr 默认情况下。

    所以,为了让你抓住 全部的 全局异常,则必须创建全局异常处理程序或将自己的函数映射到 sys.exceptbook系统 .

    我强烈建议你不要这样做,因为你不知道它还有什么副作用。