Python

Python 使用 IceCream 輸出開發除錯資訊教學與範例

介紹如何在 Python 中使用 icecream 模組幫助開發者進行程式的測試與除錯。

IceCream 是一套專門用於輸出除錯訊息的 Python 模組,其功能類似 print() 函數,但是在輸出除錯訊息時更方便。

安裝 icecream 模組

icecream 模組可透過 pip 安裝:

# 安裝 icecream 套件
pip install icecream

觀察變數

傳統上在程式開發時若要查看變數的內容,通常都會使用 print() 函數:

#!/usr/bin/python3

# 測試用變數
a = 123
b = "ABC"

# 以 print 輸出除錯資訊
print("a =", a)
print("b =", b)
a = 123
b = ABC

這種狀況就可以改用 IceCream 的 ic() 函數來輸出除錯用的資訊,使用上會比 print() 更方便:

#!/usr/bin/python3
from icecream import ic

# 測試用變數
a = 123
b = "ABC"

# 以 IceCream 輸出除錯資訊
ic(a)
ic(b)
ic| a: 123
ic| b: 'ABC'

使用 ic() 函數代替 print() 函數來輸出除錯資訊有幾個優點:

  • 自動輸出變數的名稱與值。
  • 寫程式的時候,不用打那麼多字。
  • 清楚表現資料結構。
  • 彩色排版輸出(在終端機中)。
  • 支援輸出檔案名稱、行號、父函數。

對於結構比較複雜的變數,也很適合用 ic() 函數輸出:

# 輸出資料結構
d = {'key': {1: 'one'}}
ic(d)
ic| d: {'key': {1: 'one'}}

輸出函數的呼叫資訊與計算結果:

# 輸出函數計算結果
def foo(i):
    return i + 333

ic(foo(123))
ic| foo(123): 456

觀察程式執行

在程式開發階段,我們時常會需要觀察程式的執行邏輯與順序是否正確,就會在程式之中加入許多 print 函數輸出執行的資訊:

#!/usr/bin/python3

def foo(a):
    print("呼叫 foo 函數")
    # ...

    if a == 1:
        print("處理 a == 1 的狀況")
        # ...

    else:
        print("處理其他狀況")
        # ...

foo(1)
呼叫 foo 函數
處理 a == 1 的狀況

這種狀況可以改用 IceCream 來處理:

#!/usr/bin/python3
from icecream import ic

def foo(a):
    ic()
    # ...

    if a == 1:
        ic()
        # ...

    else:
        ic()
        # ...

foo(1)

若呼叫 ic() 函數時不帶任何參數,就會自動輸出指令稿的名稱、所在位置的行號、所在函數名稱、執行的時間點。

假設這個 Python 指令稿的名稱為 myscript.py,則執行的輸出就會類似這樣:

ic| myscript.py:5 in foo() at 11:55:26.998
ic| myscript.py:9 in foo() at 11:55:26.999

傳回原始變數值

ic 函數會傳回原始變數值,所以可以輕易放在程式碼的任何位置:

#!/usr/bin/python3
from icecream import ic

# ic 函數會傳回原始變數值
a = 1
b = ic(a) + 1
ic(b)
ic| a: 1
ic| b: 2

以字串傳回除錯資訊

ic() 函數預設會將除錯資訊輸出至標準錯誤(stderr),而 ic.format() 則可以將除錯資訊以字串傳回:

#!/usr/bin/python3
from icecream import ic

a = 123

# 將除錯資訊以字串傳回
b = ic.format(a)
print(b)
ic| a: 123

啟用與停用輸出除錯資訊

ic.enable()ic.disable() 函數可以用於啟用與停用輸出除錯資訊:

#!/usr/bin/python3
from icecream import ic

ic(1)

# 停用輸出除錯資訊
ic.disable()

ic(2)

# 啟用輸出除錯資訊
ic.enable()

ic(3)
ic| 1
ic| 3
Share
Published by
Office Guide

Recent Posts

Python 使用 PyAutoGUI 自動操作滑鼠與鍵盤

本篇介紹如何在 Python ...

1 年 ago

Ubuntu Linux 以 WireGuard 架設 VPN 伺服器教學與範例

本篇介紹如何在 Ubuntu ...

1 年 ago

Linux 網路設定 ip 指令用法教學與範例

本篇介紹如何在 Linux 系...

1 年 ago

Linux 以 Cryptsetup、LUKS 加密 USB 隨身碟教學與範例

介紹如何在 Linux 系統中...

1 年 ago