pretty_errors_python
https://blog.csdn.net/weixin_36338224/article/details/104759600
當(dāng)我們寫的一個(gè)腳本或程序發(fā)生各種不可預(yù)知的異常時(shí),如果我們沒有進(jìn)行捕獲處理的時(shí)候,通常都會(huì)致使程序崩潰退出,并且會(huì)在終端打印出一堆 密密麻麻 的 traceback 堆棧信息來(lái)告訴我們,是哪個(gè)地方出了問(wèn)題。
就像這樣子,天吶,密集恐懼癥要犯了都
上面這段 traceback
只有黑白兩個(gè)顏色,無(wú)法像代碼高亮那樣,對(duì)肉眼實(shí)現(xiàn)太不友好了
無(wú)法直接顯示報(bào)錯(cuò)的代碼,排查問(wèn)題慢人一步,效率太低
那有沒有一種辦法,可以解決這些問(wèn)題呢?
當(dāng)然有了,在 Python 中,沒有什么問(wèn)題是一個(gè)庫(kù)解決不了的,如果有,那就等你去開發(fā)這個(gè)庫(kù)。
今天要介紹的這個(gè)庫(kù)呢,叫做 pretty-errors ,從名字上就可以知道它的用途,是用來(lái)美化錯(cuò)誤信息的。
通過(guò)這條命令你可以安裝它
$ python3 -m pip install pretty-errors
- 環(huán)境要求
由于使用了 pretty-errors 后,你的 traceback 信息輸出,會(huì)有代碼高亮那樣的效果,因此當(dāng)你在使用測(cè)試使用 pretty-error 時(shí),請(qǐng)確保你使用的終端可以輸出帶有顏色的字體。
在 windows 上你可以使用 Powershell,cmder 等
在 Mac 上你可以使用自帶的終端,或者安裝一個(gè)更好用的 iTerm2
- 效果對(duì)比
隨便寫一個(gè)沒有使用 pretty-errors ,并且報(bào)錯(cuò)了的程序,是這樣子的。
而使用了 pretty_errors 后,報(bào)錯(cuò)信息被美化成這樣了。
是不是感覺清楚了不少,那種密密麻麻帶來(lái)的焦慮感是不是都消失了呢?
當(dāng)然這段代碼少,你可能還沒感受到,那就來(lái)看下 該項(xiàng)目在 Github上的一張效果對(duì)比圖吧
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-OtFDJl6K-1583754496833)(https://warehouse-camo.cmh1.psfhosted.org/31399c5a034c3989b9e99b35249e8f2f0d40e102/68747470733a2f2f692e696d6775722e636f6d2f306a7045716f622e706e67)]
- 配置全局可用
可以看到使用了 pretty_errors 后,無(wú)非就是把過(guò)濾掉了一些干擾我們視線的無(wú)用信息,然后把有用的關(guān)鍵信息給我們高亮顯示。
既然既然這樣,那 pretty_errors 應(yīng)該也能支持我們?nèi)绾巫远x我們選用什么樣的顏色,怎么排版吧?
答案是顯而易見的。
pretty_errors 和其他庫(kù)不太一樣,在一定程度上(如果你使用全局配置的話),它并不是開箱即用的,你在使用它之前可能需要做一下配置。
使用這一條命令,會(huì)讓你進(jìn)行配置,可以讓你在該環(huán)境中運(yùn)行其他腳本時(shí)的 traceback 輸出都自動(dòng)美化。
$ python3 -m pretty_errors
配置完成后,你再運(yùn)行任何腳本,traceback 都會(huì)自動(dòng)美化了。
不僅是在我的 iTerm 終端下
在 PyCharm 中也會(huì)
唯一的缺點(diǎn)就是,原先在 PyCharm 中的 traceback 可以直接點(diǎn)擊 文件路徑 直接跳轉(zhuǎn)到對(duì)應(yīng)錯(cuò)誤文件代碼行,而你如果是在 VSCode 可以使用 下面自定義配置的方案解決這個(gè)問(wèn)題(下面會(huì)講到,參數(shù)是:display_link)。
因此,有些情況下,你并不想設(shè)置 pretty_errors 全局可用。
那怎么取消之前的配置呢?
只需要再次輸出 python -m pretty_errors,輸出入 C 即可清除。
- 單文件中使用
取消全局可用后,你可以根據(jù)自己需要,在你需要使用 pretty-errors 的腳本文件中導(dǎo)入pretty_errors,即可使用
import pretty_errors
import pretty_errorsdef foo():1/0if __name__ == "__main__":foo()
值得一提的是,使用這種方式,若是你的腳本中,出現(xiàn)語(yǔ)法錯(cuò)誤,則輸出的異常信息還是按照之前的方式展示,并不會(huì)被美化。
因此,為了讓美化更徹底,官方推薦你使用 python -m pretty_errors
- 自定義設(shè)置
上面的例子里,我們使用的都是 pretty_errors 的默認(rèn)美化格式,展示的信息并沒有那么全。
比如
它并沒有展示報(bào)錯(cuò)文件的絕對(duì)路徑,這將使我們很難定位到是哪個(gè)文件里的代碼出現(xiàn)錯(cuò)誤。
如果能把具體報(bào)錯(cuò)的代碼,給我們展示在終端屏幕上,就不需要我們?cè)俚皆创a文件中排查原因了。
如果使用了 pretty_errors 導(dǎo)致異常信息有丟失,那還不如不使用 pretty_errors 呢。
不過(guò),可以告訴你的是,pretty_errors 并沒有你想象的那么簡(jiǎn)單。
它足夠開放,支持自定義配置,可以由你選擇你需要展示哪些信息,怎么展示?
這里舉一個(gè)例子
import pretty_errors# 【重點(diǎn)】進(jìn)行配置
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,
)# 原來(lái)的代碼
def foo():1/0if __name__ == "__main__":foo()
在你像上面這樣使用 pretty_errrs.configure 進(jìn)行配置時(shí),拋出的的異常信息就變成這樣了。
當(dāng)然了,pretty_errors.configure() 還可以接收很多的參數(shù),你可以根據(jù)你自己的需要進(jìn)行配置。
5.1 設(shè)置顏色
header_color:設(shè)置標(biāo)題行的顏色。
timestamp_color:設(shè)置時(shí)間戳顏色
default_color:設(shè)置默認(rèn)的顏色
filename_color:設(shè)置文件名顏色
line_number_color:設(shè)置行號(hào)顏色。
function_color:設(shè)置函數(shù)顏色。
link_color:設(shè)置鏈接的顏色。
在設(shè)置顏色的時(shí)候,pretty_errors 提供了一些常用的 顏色常量供你直接調(diào)取。
BLACK:黑色
GREY:灰色
RED:紅色
GREEN:綠色
YELLOW:黃色
BLUE:藍(lán)色
MAGENTA:品紅色
CYAN:藍(lán)綠色
WHITE:白色
而每一種顏色,都相應(yīng)的匹配的 BRIGHT_ 變體 和 _BACKGROUND 變體,
其中,_BACKGROUND 用于設(shè)置背景色,舉個(gè)例子如下。
5.2 設(shè)置顯示內(nèi)容
line_number_first
啟用后,將首先顯示行號(hào),而不是文件名。
lines_before : 顯示發(fā)生異常處的前幾行代碼
lines_after: 顯示發(fā)生異常處的后幾行代碼
display_link:啟用后,將在錯(cuò)誤位置下方寫入鏈接,VScode將允許您單擊該鏈接。
separator_character:用于創(chuàng)建標(biāo)題行的字符。默認(rèn)情況下使用連字符。如果設(shè)置為 ‘’ 或者 None ,標(biāo)題將被禁用。
display_timestamp:啟用時(shí),時(shí)間戳將寫入回溯頭中。
display_locals
啟用后,將顯示在頂部堆棧框架代碼中的局部變量及其值。
display_trace_locals
啟用后,其他堆棧框架代碼中出現(xiàn)的局部變量將與它們的值一起顯示。
5.3 設(shè)置怎么顯示
line_length:設(shè)置每行的長(zhǎng)度,默認(rèn)為0,表示每行的輸出將與控制臺(tái)尺寸相匹配,如果你設(shè)置的長(zhǎng)度將好與控制臺(tái)寬度匹配,則可能需要禁用full_line_newline,以防止出現(xiàn)明顯的雙換行符。
full_line_newline:當(dāng)輸出的字符滿行時(shí),是否要插入換行符。
timestamp_function
調(diào)用該函數(shù)以生成時(shí)間戳。默認(rèn)值為time.perf_counter。
top_first
啟用后,堆棧跟蹤將反轉(zhuǎn),首先顯示堆棧頂部。
display_arrow
啟用后,將針對(duì)語(yǔ)法錯(cuò)誤顯示一個(gè)箭頭,指向有問(wèn)題的令牌。
truncate_code
啟用后,每行代碼將被截?cái)嘁赃m合行長(zhǎng)。
stack_depth
要顯示的堆棧跟蹤的最大條目數(shù)。什么時(shí)候0將顯示整個(gè)堆棧,這是默認(rèn)值。
exception_above
啟用后,異常將顯示在堆棧跟蹤上方。
exception_below:
啟用后,異常顯示在堆棧跟蹤下方。
reset_stdout
啟用后,重置轉(zhuǎn)義序列將寫入stdout和stderr;如果您的控制臺(tái)留下錯(cuò)誤的顏色,請(qǐng)啟用此選項(xiàng)。
filename_display
設(shè)置文件名的展示方式,有三個(gè)選項(xiàng): pretty_errors.FILENAME_COMPACT 、pretty_errors.FILENAME_EXTENDED,或者pretty_errors.FILENAME_FULL
以上,就是我對(duì) pretty_errors 的使用體驗(yàn),總的來(lái)說(shuō),這個(gè)庫(kù)功能非常強(qiáng)大,使用效果也特別酷炫,它就跟 PEP8 規(guī)范一樣,沒有它是可以,但是有了它會(huì)更好一樣。對(duì)于某些想自定義錯(cuò)誤輸出場(chǎng)景的人,pretty_errors 會(huì)是一個(gè)不錯(cuò)的解決方案,明哥把它推薦給你。
總結(jié)
以上是生活随笔為你收集整理的pretty_errors_python的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 时间序列小结
- 下一篇: 论文阅读工具ReadPaper