如何在 Python 中使用 argparse 處理無效引數?
Argparse 是一個 Python 模組,用於透過定義程式引數、引數型別、預設值和幫助訊息來建立使用者友好的命令列介面。該模組可以處理不同的引數型別,並允許建立具有自己引數集的子命令。Argparse 生成一個幫助訊息,顯示可用的選項以及如何使用它們,如果輸入無效引數,則會引發錯誤。總的來說,argparse 簡化了為 Python 程式建立健壯的命令列介面的過程。
使用 try 和 except 塊
使用 argparse 處理無效引數的一種方法是使用 try 和 except 塊。
示例
在此程式碼中,我們首先匯入 argparse 模組並建立一個 ArgumentParser 物件。
我們使用 add_argument() 方法向解析器新增一個命令列引數。在本例中,我們定義了一個名為 --num 的引數,它接受一個整數值。
然後,我們使用 parse_args() 方法解析命令列引數。
在 try 塊內,我們嘗試對 args.num 的值進行平方,並將結果儲存在一個名為 result 的變數中。
如果為 --num 傳遞的引數是一個有效的整數,則 try 塊將成功執行,程式將列印結果。
但是,如果為 --num 傳遞了一個無效的引數(例如字串或浮點數),則 try 塊將引發 TypeError 異常。我們使用 except 塊捕獲此異常,該塊列印一條錯誤訊息,指示該引數無效。
#my_script.py
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--num", type=int, help="Enter an integer")
args = parser.parse_args()
try:
result = args.num ** 2
print("Result:", result)
except TypeError:
print("Invalid argument. Please enter an integer.")
假設程式碼位於名為 my_script.py 的檔案中,並且您想對數字 4 求平方,則需要開啟一個終端視窗並鍵入
~$python my_script.py --num 4
這將執行指令碼並將整數 4 作為 --num 引數傳遞。然後,指令碼將計算 4 的平方(結果為 16)並列印結果。
輸出
Result: 16
使用 choices 引數
使用 argparse 處理無效引數的第二種方法是使用 choices 引數。
示例
在此程式碼中,我們再次建立一個 ArgumentParser 物件並定義一個名為 --color 的命令列引數。
但是,在本例中,我們使用 choices 引數指定 --color 引數的有效選項列表。為 --color 傳遞的任何不在有效選項列表中的引數都將引發錯誤。
當呼叫 parse_args() 方法時,argparse 將自動檢查 args.color 的值是否為有效選項之一。如果是,則程式將列印所選顏色。否則,argparse 將引發錯誤,指示該引數無效。
#my_script.py
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--color", choices=["red", "green", "blue"], help="Enter a color")
args = parser.parse_args()
print("Your chosen color is:", args.color)
假設程式碼位於名為 my_script.py 的檔案中,並且您想選擇顏色“藍色”,則需要開啟一個終端視窗並鍵入
~$python my_script.py --color blue
這將執行指令碼並將“藍色”作為 --color 引數傳遞。然後,指令碼將列印以下結果。
輸出
Your chosen color is: blue
使用自定義錯誤訊息
使用 argparse 處理無效引數的第三種方法是使用自定義錯誤訊息。
示例
在此程式碼中,我們定義了一個名為 check_positive 的自定義函式,該函式以一個值作為引數,並檢查它是否為正整數。如果該值不是正整數,則該函式將引發 ArgumentTypeError 異常,並顯示自定義錯誤訊息。
然後,我們定義 ArgumentParser 物件並新增一個名為 --num 的引數,該引數使用 check_positive 函式來驗證輸入。
當呼叫 parse_args() 方法時,argparse 將自動呼叫`
check_positive 函式來驗證輸入。如果輸入是正整數,則程式將列印平方結果。否則,argparse 將引發錯誤,並顯示我們在 check_positive 函式中定義的自定義錯誤訊息。
#my_script.py
import argparse
def check_positive(value):
ivalue = int(value)
if ivalue <= 0:
raise argparse.ArgumentTypeError("Value must be positive.")
return ivalue
parser = argparse.ArgumentParser()
parser.add_argument("--num", type=check_positive, help="Enter a positive integer")
args = parser.parse_args()
result = args.num ** 2
print("Result:", result)
假設程式碼位於名為 my_script.py 的檔案中,並且您想對數字 9 求平方,則需要開啟一個終端視窗並鍵入
~$python my_script.py --num 9
這將執行指令碼並將整數 9 作為 --num 引數傳遞。然後,指令碼將計算 9 的平方(結果為 81)並列印結果。
輸出
Result: 81
如果傳遞給指令碼的引數為 -9,例如
~$python my_script.py –num -9
則會顯示如下錯誤
輸出
my_script.py: error: argument --num: Value must be positive.
使用 nargs 引數
argparse 中的 nargs 引數可用於指定特定選項預期接收的命令列引數數量。以下是如何使用它來處理無效引數的示例。
示例
在此程式碼中,我們建立一個 ArgumentParser 物件並定義一個名為 --numbers 的選項。我們將 nargs 引數設定為 +,這意味著該選項預期接收一個或多個命令列引數。
然後,我們使用 parse_args() 方法解析命令列引數。
如果為 --numbers 傳遞了至少一個整數值,則程式將計算這些值的總和並列印結果。如果未傳遞任何引數,則程式將列印一條訊息,指示必須輸入至少一個整數。
#my_script.py
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--numbers', nargs='+', type=int, help='Enter a list of integers')
args = parser.parse_args()
if args.numbers is not None:
result = sum(args.numbers)
print("Result:", result)
else:
print("Please enter at least one integer.")
假設程式碼位於名為 my_script.py 的檔案中,並且您想輸入兩個引數 7 和 8,則需要開啟一個終端視窗並鍵入
~$python my_script.py --numbers 7 8
這將執行指令碼並將整數 7 和 8 作為 --numbers 引數傳遞。然後,指令碼將計算 7 和 8 的總和(結果為 15)並列印結果。
輸出
Result: 15
如果傳遞給指令碼的引數為空(沒有引數),例如
~$python my_script.py –numbers
則會顯示如下錯誤
輸出
my_script.py: error: argument --numbers: expected at least one argument
結論
總而言之,有多種方法可以使用 argparse 在 Python 中處理無效引數,包括使用 try-except 塊、choices 引數、自定義錯誤訊息、nargs 引數和子解析器。選擇合適的方法將取決於程式的具體需求以及您希望如何處理無效輸入。
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP