使Python異常輸出使其清晰可見。安裝它
python -m pip install pretty_errors
如果您希望在運行Python腳本時使用pretty_errors
,則必須將其添加到Python啟動過程中。您可以通過運行輕鬆地做到這一點:
python -m pretty_errors
這是使用pretty_errors
的推薦方法;除了更簡單和通用外,使用它將意味著SyntaxError
異常也會變得精美(如果您是手動導入pretty_errors
則無效)。
如果您尚未普遍安裝它,則可以通過將其導入到項目中:
import pretty_errors
請注意,您需要在能夠輸出顏色輸出的終端中運行以獲取顏色輸出:在Windows pretty_errors.mono()
,這意味著PowerShell,CMDER等。它將以對單色輸出有用的方式設置一些配置選項。
如果要配置輸出,請使用pretty_errors.configure()
, pretty_errors.whitelist()
, pretty_errors.blacklist()
, pretty_errors.pathed_config()
。例如:
import pretty_errors
pretty_errors . configure (
separator_character = '*' ,
filename_display = pretty_errors . FILENAME_EXTENDED ,
line_number_first = True ,
display_link = True ,
lines_before = 5 ,
lines_after = 2 ,
line_color = pretty_errors . RED + '> ' + pretty_errors . default_config . line_color ,
code_color = ' ' + pretty_errors . default_config . line_color ,
truncate_code = True ,
display_locals = True
)
pretty_errors . blacklist ( 'c:/python' )
有時, pretty_errors
不可能使用sys.excepthook
:例如,如果您使用的是安裝自己的日誌記錄的框架(例如uvicorn
)。在這種情況下,您可以使pretty_errors
將輸出刮到stderr
,然後用自己的替換。這樣做的簡單呼叫:
pretty_errors . replace_stderr ()
請注意,這將失去一些功能,因為pretty_errors
只能訪問屏幕上正在輸出的內容,而不是整個堆棧跟踪。良好的API通常可以與異常堆棧進行交互,這將允許使用excepthook
: replace_stderr
應該是最後一個度假勝地。請參閱此評論以示例
您可以使用函數whitelist(path)
和blacklist(path)
來添加必要的路徑( whitelist
)或排除( blacklist
)。堆棧的頂框從未被排除在外。
您可以設置備用配置,這些配置是由框架代碼文件的路徑觸發的。例如,如果您對系統框架不感興趣(c:/python'下的框架),但不想通過使用blacklist
來完全隱藏它們,則可以這樣做:
meh = pretty_errors . config . copy ()
meh . line_color = meh . code_color = meh . filename_color = meh . function_color = meh . line_number_color = (
pretty_errors . GREY
)
pretty_errors . pathed_config ( meh , 'c:/python' )
PYTHON_PRETTY_ERRORS
設置為0
來禁用pretty_errors
。 IE在命令提示符: set PYTHON_PRETTY_ERRORS=0
調用pretty_errors.activate()
將覆蓋此。
如果您希望選擇性地利用pretty_errors
,請使用以上內容,然後在您的代碼中執行計算以確定是否調用pretty_errors.activate()
。
pretty_errors
(例如,以保留錯誤日誌)。如果您想這樣做,那麼將PYTHON_PRETTY_ERRORS_ISATTY_ONLY
設置為non-Zero會導致pretty_errors
檢查它是否在交互式終端中運行,並且只有在這種情況下激活。 set PYTHON_PRETTY_ERRORS_ISATTY_ONLY=1
設置此設置將在相同的情況下禁用replace_stderr()
,除非您使用force
參數來調用它: replace_stderr(force=True)
。
調用pretty_errors.activate()
將覆蓋此。
您可以檢查pretty_errors.terminal_is_interactive
,以查看終端是否是交互式( pretty_errors
通過檢查sys.stderr.isatty()
)。您可以使用它來選擇其他配置。例如:
if not pretty_errors . terminal_is_interactive :
pretty_errors . mono ()
配置設置存儲在pretty_errors.config
中,儘管應使用pretty_errors.configure()
設置。默認配置的引用存儲在pretty_errors.default_config
中。
name
可選字段以存儲配置名稱中。
line_length
此時輸出將包裝。如果設置為0
(默認為0),它將自動匹配您的控制台寬度。
full_line_newline
即使線已滿,也可以插入硬新線。如果line_length
與您的控制台寬度相同,並且啟用了這一點,那麼當行完全滿時,您會看到雙重新線,因此通常只有在它們不同的情況下才會設置此線。
separator_character
字符用於創建標題線。默認情況下使用連字符。如果設置為None
或''
則將禁用標題。
display_timestamp
啟用時,將在Trackback標頭中寫入時間戳。
timestamp_function
調用了生成時間戳的功能。默認值為time.perf_counter
。
exception_above
啟用後,異常顯示在堆棧跟踪上方。
exception_below
啟用後,異常顯示在堆棧跟踪下方。
stack_depth
堆棧跟踪顯示的最大條目數量。當0
顯示整個堆棧時,這是默認值。
top_first
啟用後,將逆轉堆棧跟踪,首先顯示堆棧的頂部。
always_display_bottom
當啟用(默認值為默認值)時,將始終顯示堆棧跟踪的底部幀。
show_suppressed
當啟用堆棧跟踪中的所有抑制例外情況時(通常是抑制它們,因為上面的例外已替換了)。正常的python行為是隱藏它們。
filename_display
如何顯示文件名:可以是pretty_errors.FILENAME_COMPACT
, pretty_errors.FILENAME_EXTENDED
或pretty_errors.FILENAME_FULL
line_number_first
啟用後,將首先顯示行號,而不是文件名。
display_link
啟用後,將寫一個鏈接在錯誤位置下方,VSCODE將允許您單擊。
lines_after
, lines_before
在行之前和之後,出現了多少個代碼線。
trace_lines_after
, trace_lines_before
在堆棧跟踪中,在行之前和之後,互相顯示的代碼線互相顯示多少行。
truncate_code
啟用後,將截斷每行代碼以適合行長。
display_locals
啟用後,將顯示帶有其值的頂部堆棧框架代碼中出現的本地變量。
display_trace_locals
啟用後,將顯示其他堆棧框架代碼中出現的本地變量以其值顯示。
truncate_locals
啟用時,將截斷顯示的本地變量的值以適合行長。
display_arrow
啟用後,將顯示一個箭頭,以用於語法錯誤,指向違規令牌。
arrow_head_character
, arrow_tail_character
字符用於繪製指向語法錯誤的箭頭。
inner_exception_message
當一個異常發生在另一個異常之間時顯示的消息。默認值是None
,它將簡單地顯示由標頭隔開的異常。如果您想模擬默認的非預言行為,請使用以下方式:
inner_exception_message = pretty_errors.MAGENTA + "n During handling of the above exception, another exception occurred:n"
請注意,如果您使用top_first
,則訂單將被顛倒,因此您應該使用這樣的消息:
inner_exception_message = pretty_errors.MAGENTA + "n The above exception occurred during another exception:n"
inner_exception_separator
默認值為False
。設置為True
時,將在inner_exception_message
之前寫入標頭。
prefix
在報告頂部(標題下方)顯示在報告頂部的文本字符串。
infix
堆棧的每個幀之間顯示的文本字符串。
postfix
在異常報告的底部顯示的文本字符串。
reset_stdout
啟用後,將重置逃生序列寫入stdout和stderr;如果您的控制台的顏色錯誤,請打開此操作。
這些顏色字符串將在異常消息的相關部分之前輸出。如果您願意,您可能會包含非彈簧序列字符串;如果您沒有支持顏色輸出的終端,或者只是想包括額外的界定。
header_color
逃脫序列以設置標題顏色。
timestamp_color
逃脫序列以設置時間戳顏色。
exception_color
逃脫序列以設置異常顏色。
exception_arg_color
逃脫順序設置異常參數顏色。
exception_file_color
逃脫序列以在例外(例如,在FileNotFoundError中)設置文件名的顏色。
filename_color
逃脫序列以設置文件名顏色。
line_number_color
逃脫序列設置線號顏色。
function_color
逃脫序列以設置功能顏色。
link_color
逃脫序列以設置鏈接顏色。
line_color
逃脫序列以設置導致例外的代碼線的顏色。
code_color
逃脫序列以設置其他顯示的代碼行的顏色。
arrow_head_color
, arrow_tail_color
逃脫序列以設置指向語法錯誤的箭頭的顏色。
syntax_error_color
逃脫序列以設置語法誤差令牌的顏色。
local_name_color
逃脫序列以設置局部變量名稱的顏色。
local_value_color
逃脫序列以設置局部變量值的顏色。
local_len_color
逃脫序列以設置局部截斷時局部值長度的顏色。
pretty_errors
設置這些顏色時可以使用一些內置的逃生序列常數:
BLACK
GREY
RED
GREEN
YELLOW
BLUE
MAGENTA
CYAN
WHITE
對於每種顏色,都有一個匹配的BRIGHT_
variant(即pretty_errors.BRIGHT_RED
),還有一個_BACKGROUND
變體來設置背景顏色(即pretty_errors.RED_BACKGROUND
)。
例如:
pretty_errors . configure (
line_color = pretty_errors . CYAN_BACKGROUND + pretty_errors . BRIGHT_WHITE
)
對於最廣泛的自定義(缺點包裹),您可以覆蓋默認的ExceptionWriter
類,從而可以根據需要定制輸出。通常,您只需要覆蓋write_
方法即可。
例如:
class MyExceptionWriter ( pretty_errors . ExceptionWriter ):
def write_header ( self ):
self . output_text ( '######## ERROR ########' )
pretty_errors . exception_writer = MyExceptionWriter ()
在Python解釋器中運行help(pretty_errors.ExceptionWriter)
以獲取更多詳細信息。