2015-05-10 79 views
2

我使用可選參數argparse,但我想避免有這樣的事情:script.py -a 1 -b -a 2 這裏我們有兩次可選參數'a',只有第二個參數是回。我想要獲得這兩個值或獲取錯誤消息。 我應該如何定義參數?Python argparse:如何檢測重複的可選參數?

[編輯] 這是代碼:

import argparse 

parser = argparse.ArgumentParser() 
parser.add_argument('-a', dest='alpha', action='store', nargs='?') 
parser.add_argument('-b', dest='beta', action='store', nargs='?') 

params, undefParams = self.parser.parse_known_args() 
+0

向我們展示你到目前爲止的代碼,否則我們並不會幫助你... –

+0

嘗試https://docs.python.org/3/library/argparse。 html#nargs – dav1d

+0

我已經添加了代碼。但是這個鏈接並沒有幫助。我不想要一個選項被指定兩次。目前這是發生了什麼: script.py -a 1 -b 2 -a 3 --->給出a = 3和b = 2,沒有錯誤,並且沒有關於第一個參數的信息。我只是想考慮具有相同的可選參數兩次的錯誤。 – Pendus

回答

4

append動作將收集在一個列表

parser.add_argument('-a', '--alpha', action='append') 

從重複使用時的值產生args命名空間等:

namespace(alpha=['1','3'], b='4') 

解析後您可以檢查args.alpha,並接受或投訴值的數量。 parser.error('repeated -a')可用於發出argparse風格的錯誤消息。

你可以在一個自定義的Action類中實現類似的功能,但這需要理解這種類的基本結構和操作。我無法想象任何可以在Action中完成的任何事情,這些事情不能在後面的附加列表中完成。

https://stackoverflow.com/a/23032953/901925是一個沒有重複自定義Action的答案。

你爲什麼用nargs='?'這樣的標記參數?沒有const參數,這幾乎是無用的(請參閱文檔中的nargs=?部分)。

另一個類似這樣:Python argparse with nargs behaviour incorrect

相關問題