首發於我的公.衆.號:Python編程時光,轉載請私信
當咱們寫的一個腳本或程序發生各類不可預知的異常時,若是咱們沒有進行捕獲處理的時候,一般都會導致程序崩潰退出,而且會在終端打印出一堆 密密麻麻 的 traceback 堆棧信息來告訴咱們,是哪一個地方出了問題。python
就像這樣子,天吶,密集恐懼症要犯了都shell
上面這段 traceback編程
那有沒有一種辦法,能夠解決這些問題呢?windows
固然有了,在 Python 中,沒有什麼問題是一個庫解決不了的,若是有,那就等你去開發這個庫。框架
今天要介紹的這個庫呢,叫作 pretty-errors
,從名字上就能夠知道它的用途,是用來美化錯誤信息的。函數
經過這條命令你能夠安裝它測試
$ python3 -m pip install pretty-errors
因爲使用了 pretty-errors
後,你的 traceback 信息輸出,會有代碼高亮那樣的效果,所以當你在使用測試使用 pretty-error
時,請確保你使用的終端能夠輸出帶有顏色的字體。字體
在 windows 上你可使用 Powershell,cmder 等spa
在 Mac 上你可使用自帶的終端,或者安裝一個更好用的 iTerm2code
隨便寫一個沒有使用 pretty-errors ,而且報錯了的程序,是這樣子的。
而使用了 pretty_errors 後,報錯信息被美化成這樣了。
是否是感受清楚了很多,那種密密麻麻帶來的焦慮感是否是都消失了呢?
固然這段代碼少,你可能還沒感覺到,那就來看下 該項目在 Github上的一張效果對比圖吧
能夠看到使用了 pretty_errors 後,無非就是把過濾掉了一些干擾咱們視線的無用信息,而後把有用的關鍵信息給咱們高亮顯示。
既然既然這樣,那 pretty_errors 應該也能支持咱們如何自定義咱們選用什麼樣的顏色,怎麼排版吧?
答案是顯而易見的。
pretty_errors 和其餘庫不太同樣,在必定程度上(若是你使用全局配置的話),它並非開箱即用的,你在使用它以前可能須要作一下配置。
使用這一條命令,會讓你進行配置,可讓你在該環境中運行其餘腳本時的 traceback 輸出都自動美化。
$ python3 -m pretty_errors
配置完成後,你再運行任何腳本,traceback 都會自動美化了。
不只是在個人 iTerm 終端下
在 PyCharm 中也會
惟一的缺點就是,原先在 PyCharm 中的 traceback 能夠直接點擊 文件路徑
直接跳轉到對應錯誤文件代碼行,而你若是是在 VSCode 可使用 下面自定義配置的方案解決這個問題(下面會講到,參數是:display_link
)。
所以,有些狀況下,你並不想設置 pretty_errors
全局可用。
那怎麼取消以前的配置呢?
只須要再次輸出 python -m pretty_errors
,輸出入 C
便可清除。
取消全局可用後,你能夠根據本身須要,在你須要使用 pretty-errors
的腳本文件中導入 pretty_errors
,便可使用
import pretty_errors
就像這樣
import pretty_errors def foo(): 1/0 if __name__ == "__main__": foo()
值得一提的是,使用這種方式,如果你的腳本中,出現語法錯誤,則輸出的異常信息仍是按照以前的方式展現,並不會被美化。
所以,爲了讓美化更完全,官方推薦你使用 python -m pretty_errors
上面的例子裏,咱們使用的都是 pretty_errors
的默認美化格式,展現的信息並無那麼全。
好比
若是使用了 pretty_errors
致使異常信息有丟失,那還不如不使用 pretty_errors
呢。
不過,能夠告訴你的是,pretty_errors
並無你想象的那麼簡單。
它足夠開放,支持自定義配置,能夠由你選擇你須要展現哪些信息,怎麼展現?
這裏舉一個例子
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, ) # 原來的代碼 def foo(): 1/0 if __name__ == "__main__": foo()
在你像上面這樣使用 pretty_errrs.configure
進行配置時,拋出的的異常信息就變成這樣了。
固然了,pretty_errors.configure()
還能夠接收不少的參數,你能夠根據你本身的須要進行配置。
header_color
:設置標題行的顏色。timestamp_color
:設置時間戳顏色default_color
:設置默認的顏色filename_color
:設置文件名顏色line_number_color
:設置行號顏色。function_color
:設置函數顏色。link_color
:設置連接的顏色。在設置顏色的時候,pretty_errors
提供了一些經常使用的 顏色常量供你直接調取。
BLACK
:黑色GREY
:灰色RED
:紅色GREEN
:綠色YELLOW
:黃色BLUE
:藍色MAGENTA
:品紅色CYAN
:藍綠色WHITE
:白色而每一種顏色,都相應的匹配的 BRIGHT_
變體 和 _BACKGROUND
變體,
其中,_BACKGROUND
用於設置背景色,舉個例子以下。
line_number_first
lines_before
: 顯示發生異常處的前幾行代碼lines_after
: 顯示發生異常處的後幾行代碼display_link
:啓用後,將在錯誤位置下方寫入連接,VScode將容許您單擊該連接。separator_character
:用於建立標題行的字符。默認狀況下使用連字符。若是設置爲 ''
或者 None
,標題將被禁用。display_timestamp
:啓用時,時間戳將寫入回溯頭中。display_locals
display_trace_locals
line_length
:設置每行的長度,默認爲0,表示每行的輸出將與控制檯尺寸相匹配,若是你設置的長度將好與控制檯寬度匹配,則可能須要禁用full_line_newline
,以防止出現明顯的雙換行符。full_line_newline
:當輸出的字符滿行時,是否要插入換行符。timestamp_function
time.perf_counter
。top_first
display_arrow
truncate_code
stack_depth
0
將顯示整個堆棧,這是默認值。exception_above
exception_below
:reset_stdout
filename_display
設置文件名的展現方式,有三個選項: pretty_errors.FILENAME_COMPACT
、pretty_errors.FILENAME_EXTENDED
,或者pretty_errors.FILENAME_FULL
以上,就是我對 pretty_errors
的使用體驗,總的來講,這個庫功能很是強大,使用效果也特別酷炫,它就跟 PEP8 規範同樣,沒有它是能夠,可是有了它會更好同樣。對於某些想自定義錯誤輸出場景的人,pretty_errors
會是一個不錯的解決方案,明哥把它推薦給你。