【💊 Python的解憂錦囊】Click如何驗證參數?

更新於 發佈於 閱讀時間約 4 分鐘
raw-image


我們在「【🔒 Python 先修班】👆 打造友善的使用者互動CLI介面」有介紹Python的Click命令列參數設計介面的方式, 那我們除了設計出介面提供使用者互動之外, 有時候也需要一點驗證機制, 畢竟我們心裡都清楚「garbage in, garbage out」的後果, 為了減少這種狀況, 我們針對一些非常重要的參數就會需要來點驗證, 但Click可以怎麼做呢?

善用Callbacks來自訂驗證函數

click的@option參數中有一個參數是callback, 也就是當使用者輸入參數後進行呼叫的函數, 此時我們就可以在該函數進行驗證的邏輯檢查, 避免用戶輸入到有害的資料造成不必要的麻煩, 並且我們可以引發「BadParameter」來告知使用者哪裡錯了。

訊息的呈現會進行自動化格式, 大致如下:

Error: Invalid value for '--val': 錯誤訊息

那麼首先我們可以設計一個validate的函數來驗證輸入值必須小於100且為整數:

import click

def validate(ctx: click.Context, param: click.Parameter, value: int) -> int:
"""驗證整數必須小於100

"""
try:
if value > 100:
raise ValueError(f'您輸入的值為 {value} 必須小於等於 100')

return value
except ValueError as e:
raise click.BadParameter(
e,
ctx,
param,
)

接著我們在click.option可以掛入該函數:

@click.command()
@click.option(
"--val",
type=click.INT,
callback=validate,
)
def run(**options):
print(options)

run()

最後我們稍微來測試一下幾個情境

首先是輸入非整數的部份, 將出現以下的錯誤訊息:

python test.py --val str

# 出現的訊息如下:
Usage: test.py [OPTIONS]
Try 'test.py --help' for help.

Error: Invalid value for '--val': 'str' is not a valid integer.

再來是輸入101看看是否會出現我們預期的錯誤訊息:

python test.py --val 101

# 出現的訊息如下:
Usage: test.py [OPTIONS]
Try 'test.py --help' for help.

Error: Invalid value for '--val': 您輸入的值為 101 必須小於等於 100

最後測試一下合法的輸入值:

python test.py --val 5

# 出現以下參數訊息
{'val': 5}

結語

Python的click套件對於設計CLI介面來說真的非常的方便, 除了提供基本的參數驗證機制之外, 也讓我們高度客製化我們的驗證機制, 讓我們面對於各種使用者時有一個統一的標準介面, 並且提供足夠的訊息來導引使用者填入正確的參數, 也避免我們後續作業上的資料錯誤與複雜度, 如果您還不知道Python的click套件, 那麼我們會推薦您以下的文章進行學習:

留言
avatar-img
留言分享你的想法!
avatar-img
阿Han的沙龍
130會員
288內容數
哈囉,我是阿Han,是一位 👩‍💻 軟體研發工程師,喜歡閱讀、學習、撰寫文章及教學,擅長以圖代文,化繁為簡,除了幫助自己釐清思路之外,也希望藉由圖解的方式幫助大家共同學習,甚至手把手帶您設計出高品質的軟體產品。
阿Han的沙龍的其他內容
2025/01/29
🤔 簡單且靜態就足夠了? 相信我們在開發Python應用程式的過程中, 常常會借用Enum來定義我們可能的選項, 就像顏色紅、綠、黃會有這樣的結構: class Color(str, Enum): RED = 'red' GREED = 'green' YELLOW = 'yel
Thumbnail
2025/01/29
🤔 簡單且靜態就足夠了? 相信我們在開發Python應用程式的過程中, 常常會借用Enum來定義我們可能的選項, 就像顏色紅、綠、黃會有這樣的結構: class Color(str, Enum): RED = 'red' GREED = 'green' YELLOW = 'yel
Thumbnail
2025/01/08
當我們的系統發展到一定程度時, 難免會面臨到正式上線的問題, 要如何讓維運更加簡易呢? 尤其隨著複雜的客製化配置的出現時, 我們應該如何有效的管理, 甚至驗證配置是否如預期資料型態、格式…, 而正好 pydantic 可以滿足這樣的需求, 就讓我們來看看怎麼使用吧! 需安裝的套件 pip i
Thumbnail
2025/01/08
當我們的系統發展到一定程度時, 難免會面臨到正式上線的問題, 要如何讓維運更加簡易呢? 尤其隨著複雜的客製化配置的出現時, 我們應該如何有效的管理, 甚至驗證配置是否如預期資料型態、格式…, 而正好 pydantic 可以滿足這樣的需求, 就讓我們來看看怎麼使用吧! 需安裝的套件 pip i
Thumbnail
2025/01/02
要如何使用unicorn啟動多個FastAPI服務, 歡迎參考我們的「【💊 Python的解憂錦囊 - FastAPI】如何啟動多個Workers」。 當我們試著設計帶入模組化時… 我們在「【💊 Python的解憂錦囊 - FastAPI】使用 lifespan 來共享資料與管理生命週期
Thumbnail
2025/01/02
要如何使用unicorn啟動多個FastAPI服務, 歡迎參考我們的「【💊 Python的解憂錦囊 - FastAPI】如何啟動多個Workers」。 當我們試著設計帶入模組化時… 我們在「【💊 Python的解憂錦囊 - FastAPI】使用 lifespan 來共享資料與管理生命週期
Thumbnail
看更多
你可能也想看
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
全球科技產業的焦點,AKA 全村的希望 NVIDIA,於五月底正式發布了他們在今年 2025 第一季的財報 (輝達內部財務年度為 2026 Q1,實際日曆期間為今年二到四月),交出了打敗了市場預期的成績單。然而,在銷售持續高速成長的同時,川普政府加大對於中國的晶片管制......
Thumbnail
全球科技產業的焦點,AKA 全村的希望 NVIDIA,於五月底正式發布了他們在今年 2025 第一季的財報 (輝達內部財務年度為 2026 Q1,實際日曆期間為今年二到四月),交出了打敗了市場預期的成績單。然而,在銷售持續高速成長的同時,川普政府加大對於中國的晶片管制......
Thumbnail
重點摘要: 6 月繼續維持基準利率不變,強調維持高利率主因為關稅 點陣圖表現略為鷹派,收斂 2026、2027 年降息預期 SEP 連續 2 季下修 GDP、上修通膨預測值 --- 1.繼續維持利率不變,強調需要維持高利率是因為關稅: 聯準會 (Fed) 召開 6 月利率會議
Thumbnail
重點摘要: 6 月繼續維持基準利率不變,強調維持高利率主因為關稅 點陣圖表現略為鷹派,收斂 2026、2027 年降息預期 SEP 連續 2 季下修 GDP、上修通膨預測值 --- 1.繼續維持利率不變,強調需要維持高利率是因為關稅: 聯準會 (Fed) 召開 6 月利率會議
Thumbnail
本文介紹了Python中函式引數的*args和**kwargs用法,通過*args處理可變數量的位置引數,通過**kwargs處理可變數量的關鍵字引數。不僅介紹了相應的語法和程式範例,還解釋了它們的順序問題和建議的慣例用法。
Thumbnail
本文介紹了Python中函式引數的*args和**kwargs用法,通過*args處理可變數量的位置引數,通過**kwargs處理可變數量的關鍵字引數。不僅介紹了相應的語法和程式範例,還解釋了它們的順序問題和建議的慣例用法。
Thumbnail
歡迎來到 【👌 程式碼質量案例】 系列, 這邊我們將分享實際開發過程中會遇到的程式碼難以維護的案例及解決方法, 期望透過這些技巧讓我們的產品更加的穩健也更容易於維護。 P.S 本篇會以Python程式語言進行示範, 其他語言的處理方式也雷同, 包括Javascript、Golang…等。 📖
Thumbnail
歡迎來到 【👌 程式碼質量案例】 系列, 這邊我們將分享實際開發過程中會遇到的程式碼難以維護的案例及解決方法, 期望透過這些技巧讓我們的產品更加的穩健也更容易於維護。 P.S 本篇會以Python程式語言進行示範, 其他語言的處理方式也雷同, 包括Javascript、Golang…等。 📖
Thumbnail
歡迎來到 【🔒程式碼質量案例 】 系列, 這邊我們將分享實際開發過程中會遇到的程式碼難以維護的案例及解決方法, 期望透過這些技巧讓我們的產品更加的穩健也更容易於維護。 P.S 本篇會以Python程式語言進行示範, 其他語言的處理方式也雷同, 包括Javascript、Golang…等。
Thumbnail
歡迎來到 【🔒程式碼質量案例 】 系列, 這邊我們將分享實際開發過程中會遇到的程式碼難以維護的案例及解決方法, 期望透過這些技巧讓我們的產品更加的穩健也更容易於維護。 P.S 本篇會以Python程式語言進行示範, 其他語言的處理方式也雷同, 包括Javascript、Golang…等。
Thumbnail
我們在「【🔒 Python 先修班】👆 打造友善的使用者互動CLI介面」有介紹Python的Click命令列參數設計介面的方式, 那我們除了設計出介面提供使用者互動之外, 有時候也需要一點驗證機制, 畢竟我們心裡都清楚「garbage in, garbage out」的後果, 為了減少這種狀
Thumbnail
我們在「【🔒 Python 先修班】👆 打造友善的使用者互動CLI介面」有介紹Python的Click命令列參數設計介面的方式, 那我們除了設計出介面提供使用者互動之外, 有時候也需要一點驗證機制, 畢竟我們心裡都清楚「garbage in, garbage out」的後果, 為了減少這種狀
Thumbnail
您是否苦於網路資訊爆炸嗎? 教學何其多,但卻無法好好選擇的困境呢? 歡迎加入「🔒 阿Han的軟體心法實戰營」, 這裡不給您冗餘的雜訊, 單刀直入直接送您重點, 避開選擇障礙的困境, 讓您獲得業界標準的開發起手式, 成為Top 1的頂尖人才。 使用Linux作業系統的朋友們應該對於「htop
Thumbnail
您是否苦於網路資訊爆炸嗎? 教學何其多,但卻無法好好選擇的困境呢? 歡迎加入「🔒 阿Han的軟體心法實戰營」, 這裡不給您冗餘的雜訊, 單刀直入直接送您重點, 避開選擇障礙的困境, 讓您獲得業界標準的開發起手式, 成為Top 1的頂尖人才。 使用Linux作業系統的朋友們應該對於「htop
Thumbnail
Python雖然是直譯式的腳本語言, 用起來非常方便, 但當我們的工具越發成熟時, 就會需要將使用方式、介面給設計好, 那通常都會用來處理後端伺服器的作業, 也比較面向IT端, 因此我們通常會以Command Line的形式與使用工具的人進行互動, 而內建模組雖然有「argparse」可以讓我們
Thumbnail
Python雖然是直譯式的腳本語言, 用起來非常方便, 但當我們的工具越發成熟時, 就會需要將使用方式、介面給設計好, 那通常都會用來處理後端伺服器的作業, 也比較面向IT端, 因此我們通常會以Command Line的形式與使用工具的人進行互動, 而內建模組雖然有「argparse」可以讓我們
Thumbnail
例外處理 在Python中,try 和 except 是用來處理異常的關鍵字。它們讓你能夠在代碼中檢測和處理可能引發異常的情況,以確保程序在遇到問題時不會崩潰,而是能夠優雅地處理錯誤情況。 基本用法,以下是 try 和 except 的基本用法: try: # 可能引發異常的代碼 excep
Thumbnail
例外處理 在Python中,try 和 except 是用來處理異常的關鍵字。它們讓你能夠在代碼中檢測和處理可能引發異常的情況,以確保程序在遇到問題時不會崩潰,而是能夠優雅地處理錯誤情況。 基本用法,以下是 try 和 except 的基本用法: try: # 可能引發異常的代碼 excep
Thumbnail
本篇文章介紹了在Python中的錯誤處理機制。錯誤處理在程式設計中是一個重要環節,能夠有效處理可能發生的錯誤。示範了如何捕捉錯誤並根據不同錯誤類型進行處理或提示。此外,還介紹了指定特定錯誤類型和捕捉所有錯誤的方法。透過學習這些錯誤處理的技巧,讀者可以更好地避免程式崩潰,提供友善的使用者體驗。
Thumbnail
本篇文章介紹了在Python中的錯誤處理機制。錯誤處理在程式設計中是一個重要環節,能夠有效處理可能發生的錯誤。示範了如何捕捉錯誤並根據不同錯誤類型進行處理或提示。此外,還介紹了指定特定錯誤類型和捕捉所有錯誤的方法。透過學習這些錯誤處理的技巧,讀者可以更好地避免程式崩潰,提供友善的使用者體驗。
Thumbnail
隨著程式的功能愈來愈複雜,程式碼也愈來愈多,若程式從頭寫到尾沒有任何的段落,可讀性會愈來愈差,甚至會發現同樣的一段程式碼重覆很多遍,因為類似的功能區塊在程式中可能會一再出現。這樣的程式碼不利於多人的協作開發,即使是寫作者本身在一段時間後回來看,可能也難以一眼就掌握程式的主要架構。
Thumbnail
隨著程式的功能愈來愈複雜,程式碼也愈來愈多,若程式從頭寫到尾沒有任何的段落,可讀性會愈來愈差,甚至會發現同樣的一段程式碼重覆很多遍,因為類似的功能區塊在程式中可能會一再出現。這樣的程式碼不利於多人的協作開發,即使是寫作者本身在一段時間後回來看,可能也難以一眼就掌握程式的主要架構。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News