首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python: backtrace.hook不适用于backtrace.print_exc()

python: backtrace.hook不适用于backtrace.print_exc()
EN

Stack Overflow用户
提问于 2021-11-05 17:21:29
回答 1查看 43关注 0票数 0

我不知道该怎么给我自己印的回溯画上颜色。

这给我的回溯画了颜色:

代码语言:javascript
复制
#!/bin/python3
import backtrace
backtrace.hook()
raise Exception('here')

但如果我抓住了异常并打印出来..。然后没有颜色:

代码语言:javascript
复制
#!/bin/python3
import backtrace
backtrace.hook()
import traceback
try:
    raise Exception('here')
except Exception:
    traceback.print_exc()

我知道这是两个不同的包,但他们应该能够一起工作。

如何捕获和打印颜色的异常(和堆栈跟踪)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-05 17:32:39

backtrace内部使用做这个小把戏。当异常被引发并且未被发现。时,解释器使用三个参数调用sys.excepthook,异常类、异常实例和跟踪对象。在第一个例子中,当您调用backtrace.hook()时,backtrace库实质上将sys.excepthook设置为一个自定义函数,它可以使用异常实例执行各种魔术(着色等)

代码语言:javascript
复制
>>> def custom_hook(*args):
...     print(args)
...
>>>
>>> import sys
>>> sys.excepthook = custom_hook
>>>
>>> 1 / 0 # No exception raised, instead it calls `custom_hook`
(<class 'ZeroDivisionError'>, ZeroDivisionError('division by zero'), <traceback object at 0x000001FA502B98C0>)

如果引发并捕获异常,则不调用except**)**. (使用)。

代码语言:javascript
复制
>>> def custom_hook(*args):
...     print(args)
...
>>>
>>> import sys
>>> sys.excepthook = custom_hook
>>>
>>> try:
...     1 / 0 
... except: # Since the exception is caught here, it won't call `custom_hook`
...     pass
...

确切的情况发生在你的案子里。一旦异常被捕获,你就必须重新提出例外行为。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69857030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档