庫存0為何被判漏填:用 Codex 修復校驗並複查
庫存填了0,程式卻提示「漏填」,問題可能藏在一句 if not value 裏。Python 中0和 None 都是假值,但它們在業務上的含義並不相同。
這個例子用自建 JSON 教學樣本,故意在修前版保留錯誤判斷,再用同一套驗收檢查修復。它不是客戶事故,也不是真實庫存表。
先把0的含義說清楚
本例約定:
| 輸入 | 結果 |
|---|---|
| 整數0、正整數 | 合法庫存 |
null、空字串、純空白 | 缺失 |
| 負數、小數、數字字串、布爾值 | 不接受 |
業務規則要先確定。某個商品重量不能為0,並不意味着庫存也不能為0。
缺失、類型和範圍分別判斷
原修後實現如下:
def validate_stock(value):
if isinstance(value, bool):
raise ValueError('invalid_type')
if isinstance(value, str) and not value.strip():
raise ValueError('missing')
if value is None:
raise ValueError('missing')
if not isinstance(value, int):
raise ValueError('invalid_type')
if value < 0:
raise ValueError('invalid_range')
return value
布爾值在 Python 中與整數類型有關,因此本例先排除它。缺失判斷也不再使用會把0一起攔住的真假值檢查。Python:真值測試與布爾類型
用同一套測試確認變化
給 Codex 的任務可以這樣寫:
先用數值0復現失敗,保持輸入與同一套驗收測試。
只修庫存判斷,不刪測試案例,不放寬預期。
重新執行測試和6行樣例,確認0被保留,原有異常仍被攔截。
儲存指令、退出碼、結果與程式碼差異。
2026年10月26日 Windows / Python 3.13.5 的原執行結果:修前8項測試中1項失敗,正好是0;修後同一份8項全部通過。6行樣例通過數從2變3,A01的0庫存通過,其餘5行結果不變。輸入和測試檔案的哈希保持一致。
下載後自己復現
在解壓目錄執行:
python -B test_stock.py --implementation before
python -B test_stock.py --implementation after
python -B check_inventory.py --implementation after sample.json
第一條是故意保留錯誤的教學版本,原記錄中預期退出1;第二條預期通過。執行腳本不呼叫 API。
本文於2026年10月27日整理,沒有重新執行原實驗。驗證範圍僅為這些教學資料與邊界,不包含 Excel/CSV 讀取、真實庫存、重複SKU或併發同步。
下載包的說明、模擬資料及程式顯示文字均已改為香港繁體中文。
2026年10月28日另行驗證繁體下載版:Windows / Python 3.13.5,修前8項測試中只有0庫存測試按預期失敗;修後同一份8項全部通過。6條樣例仍由2條有效變為3條,只有A01的0庫存判斷改變,輸入檔案內容不變。
香港繁體版整理日期:2026年10月28日。原文引用的產品說明核對截至2026年10月27日;原實驗日期與範圍保留於文中。