gpt4 book ai didi

python - 扭曲的未处理错误

转载 作者:太空狗 更新时间:2023-10-29 20:20:42 24 4
gpt4 key购买 nike

当 twisted reactor 正在运行并且 deferred 中发生未捕获的异常时,“未处理的错误”连同回溯和异常一起打印到终端。是否可以处理/拦截这些异常(例如,设置回调或重写方法)?

编辑:我知道我可以通过向 deferrerd 添加 errback 来捕获失败。我想知道的是,是否有一种方法可以拦截已沿链向上到达 react 器的未处理故障/异常。

编辑:本质上,我想知道扭曲 react 器是否有全局错误处理程序或可以访问的东西。我想知道,因为它打印了失败的回溯和错误。

例子:

Unhandled Error
Traceback (most recent call last):
File "/var/projects/python/server.py", line 359, in run_server
return server.run()
File "/var/projects/python/server.py", line 881, in run
reactor.run()
File "/usr/local/lib/python2.6/dist-packages/Twisted-11.0.0-py2.6-linux-x86_64.egg/twisted/internet/base.py", line 1162, in run
self.mainLoop()
File "/usr/local/lib/python2.6/dist-packages/Twisted-11.0.0-py2.6-linux-x86_64.egg/twisted/internet/base.py", line 1171, in mainLoop
self.runUntilCurrent()
--- <exception caught here> ---
File "/usr/local/lib/python2.6/dist-packages/Twisted-11.0.0-py2.6-linux-x86_64.egg/twisted/internet/base.py", line 793, in runUntilCurrent
call.func(*call.args, **call.kw)
File "/var/projects/python/server.py", line 524, in monitor
elapsed = time.time() - info.last
exceptions.NameError: global name 'info' is not defined

最佳答案

因为这些回溯是使用调用 twisted.python.log.deferr() 编写的(无论如何在 Twisted 10.2 中),可以使用 redirect 它们日志观察者。这是对这些堆栈跟踪所做的最常见的事情。我找不到日志观察者的任何基类(令人惊讶的是)但是有几个内置的:

twisted.python.log.PythonLoggingObserver - 任何记录都会进入标准 Python logging 模块。 (我在我的应用程序中使用它。)

twisted.python.log.FileLogObserver - 记录的任何内容都会保存到文件中。

这两个都将捕获 react 器报告的堆栈跟踪。您所要做的就是构造日志观察器(无参数),然后调用对象的 start() 方法。

(旁注:还有一个 StdioOnnaStick 类,您可以根据需要构造并分配给 sys.stdoutsys.stderr。然后您可以print 转到 Twisted 日志。)

要真正、真正地拦截这些调用,让堆栈跟踪永远不会被记录下来,您可以:

  • 子类 twisted.internet.SelectReactor 并覆盖其 runUntilCurrent() 方法。这就是记录堆栈跟踪的内容。在执行此操作之前,您需要研究 twisted.internet.base.ReactorBase 的源代码。
  • 完成所有 twisted.* 导入后,将 twisted.python.log.deferr 设置为您选择的与原型(prototype)兼容的函数 def err(_stuff=None, _why=None, **kw)

关于python - 扭曲的未处理错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6962738/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com