Skip to content
💻程式#122進階金字塔 · 做
工程師Claude CodeCodexClaude.ai#程式審查#Python#安全掃描

Python 程式碼審查:品質、安全與慣例

用途

對 Python 程式碼做系統化三級審查,找出邏輯錯誤、安全漏洞與風格問題,並按嚴重度排序給出修正建議,讓你在合併前有一道有結構的把關。

何時用

  • 適合:完成新功能開發、修改既有 Python 程式碼後,提交合併前想要第二道把關時。
  • 不要用:非 Python 語言的審查(請用通用版),或是需要重構建議而非品質審查的情境(請用「Python 重構建議產生器」)。

Prompt

text
請對以下 Python 程式碼做系統審查,依優先序分三級輸出:

🔴 Critical(必修)
- 邏輯錯誤(計算結果不正確、控制流有漏洞)
- 安全漏洞(SQL injection、hardcoded 密鑰、不安全的反序列化)
- 裸露的 bare except(except Exception: pass 類型)

🟡 Warning(建議修)
- 型別標注缺失或錯誤
- Pydantic model 使用不當(直接用 dict 而非 model)
- 命名不符 snake_case 慣例
- 未明確宣告的例外處理

🟢 Suggestion(可選)
- 可讀性改善
- 效能小優化
- 文件字串建議

審查規則:
- 套件管理必須用 uv,不接受 pip 直接呼叫
- Python 版本假設 3.11+,可使用 match-case、Self 等新語法
- 不允許 hardcoded 密鑰或憑證

程式碼:
{{Python 程式碼}}

範例 / 變體

  • 填好變數:把 {{Python 程式碼}} 換成實際的函式或模組內容,例如貼上 src/billing/invoice.py 的完整內容。
  • 變體(只看 Critical):在 prompt 末尾加「只輸出 🔴 Critical 問題,其餘略過」,適合趕時間的快速安全掃描。
  • 變體(搭配 git diff 輸入):把 {{Python 程式碼}} 換成「以下是這次 PR 的 git diff,只審查新增與修改的行」,讓範圍更聚焦。

🎯 範例輸出(實測)

Claude.ai 跑這句、把 {{Python 程式碼}} 換成一段訂單處理模組的結果:

點開看 AI 實際輸出

測試輸入程式碼(src/orders/process.py 節錄):

text
import subprocess
API_KEY = "sk-prod-abcd1234efgh5678"  # ECPay key

def process_order(order_id, amount):
    try:
        result = subprocess.run(f"./scripts/invoice.sh {order_id} {amount}", shell=True)
        return result
    except:
        pass

def get_discount(price, rate):
    return price * rate

審查結果:

🔴 Critical(必修)

  1. 硬編碼 API KeyAPI_KEY = "sk-prod-abcd1234efgh5678" — 金鑰洩漏風險,立即移至環境變數 os.environ["ECPAY_API_KEY"]
  2. Shell Injectionsubprocess.run(..., shell=True) 搭配未清洗的 order_id/amount 參數,攻擊者可注入 shell 命令(例:order_id = "1; rm -rf /");改用 subprocess.run(["./scripts/invoice.sh", order_id, str(amount)], shell=False)
  3. Bare exceptexcept: pass 吞掉所有例外,發票腳本失敗不會被偵測;改為 except subprocess.CalledProcessError as e: logger.error("發票腳本失敗: %s", e)

🟡 Warning(建議修)

  1. 缺少型別標注process_order(order_id, amount) 無型別,order_id: str, amount: Decimal 應明確宣告
  2. get_discount 回傳值型別不明price * rate 若都是 float 會有精度問題,建議改 Decimal

🟢 Suggestion(可選)

  1. get_discount 命名rate 語意模糊,改為 discount_rate 更清楚
  2. 缺少 docstring:兩個函式都沒有說明,建議至少一行 summary

💡 實測心得:把審查規則裡的「套件管理必須用 uv」也帶進 prompt,AI 會額外檢查 pip install 呼叫;但若你的 codebase 有歷史 requirements.txt,建議在 prompt 裡說明一下,否則 AI 可能把整個 pip 生態都標成 Warning。

延伸

你有沒有遇過這種情況?PR review 時每個人盯的點不一樣,結果最明顯的 bare except 沒人抓到,合併進去之後線上才爆。三級分類的好處是讓 Critical 清楚跳出來,不會被 Suggestion 的雜訊淹沒。審查完如果發現需要大幅重構,可以接著用「Python 重構建議產生器」深挖結構問題。

依場景分類 · 一鍵複製 · 持續擴充