我不知道如何為自己列印的回溯著色。
這為我的回溯著色:
#!/bin/python3
import backtrace
backtrace.hook()
raise Exception('here')
但是如果我捕捉到例外并列印出來......那么沒有顏色:
#!/bin/python3
import backtrace
backtrace.hook()
import traceback
try:
raise Exception('here')
except Exception:
traceback.print_exc()
我知道這是 2 個不同的包,但它們應該能夠一起作業。
如何捕獲和列印彩色例外(和堆疊跟蹤)?
uj5u.com熱心網友回復:
backtrace內部使用sys.excepthook可以解決問題。當一個例外被引發和未捕獲,解釋稱sys.excepthook有三個引數,例外類,例外實體,并回溯物件。在您的第一種情況下,當您呼叫 時backtrace.hook(),backtrace庫基本上將 設定sys.excepthook為一個自定義函式,該函式可以對例外實體(著色等...)執行各種魔術
>>> 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>)
excepthook 如果引發和捕獲例外(使用except),則不會呼叫。
>>> 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
...
您的情況發生了確切的情況。一旦捕獲到例外,您必須重新引發例外以獲得例外行為。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/350357.html
