如何在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的檔案中,並且您想選擇顏色“blue”,您將開啟一個終端視窗並鍵入

~$python my_script.py --color blue

這將執行指令碼並將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

結論

總而言之,有多種方法可以處理Python中argparse的無效引數,包括使用try-except塊、choices引數、自定義錯誤訊息、nargs引數和子解析器。選擇合適的方法將取決於程式的具體需求以及您希望如何處理無效輸入。

更新於:2023年8月10日

2K+ 次瀏覽

啟動您的職業生涯

透過完成課程獲得認證

開始
廣告
© . All rights reserved.