我想在Python argparse中使用默認值而不是用戶指定的參數。例如,這裏有一個說法:Argparse使用默認值,而不是參數
parser.add_argument(「 - 翅」,默認值=「file.txt的」)
如果用戶呼叫--fin狗,這顯然不是一個文件,所以我希望能夠使用默認值。我會怎麼做? argparse是否有一個使用默認值而不是輸入參數的函數?對於任何輸入錯誤也很抱歉,我正在通過電話進行操作。
我想在Python argparse中使用默認值而不是用戶指定的參數。例如,這裏有一個說法:Argparse使用默認值,而不是參數
parser.add_argument(「 - 翅」,默認值=「file.txt的」)
如果用戶呼叫--fin狗,這顯然不是一個文件,所以我希望能夠使用默認值。我會怎麼做? argparse是否有一個使用默認值而不是輸入參數的函數?對於任何輸入錯誤也很抱歉,我正在通過電話進行操作。
使用來自parser.parse_args()
的返回值無法訪問默認參數。更重要的是,「狗」顯然不是檔案?這是任何現代操作系統上完美有效的文件名;文件擴展名很常見,但絕不是必需的。
確定文件是否爲文件的唯一方法是嘗試打開文件。如果失敗,它可能不是文件,或者您無法訪問它。
在這種情況下,最好的解決辦法是這樣的:
DEFAULT_FIN = 'file.txt'
parser.add_argument('--fin', default=DEFAULT_FIN)
,稍後:
try:
fd = open(args.fin)
except IOError:
fd = open(DEFAULT_FIN)
雖然我認爲,如果用戶指定的命令行上的文件名和你無法打開它,那麼你應該打印一個錯誤並退出。
您可以:
argument_file = parser.add_argument('--fin', default='file.txt')
args = parser.parse_args()
try:
fo = open(args.fin)
except:
fo = open(argument_file.default)
print fo.read()
但通過恆似乎更好larsks解決方案。
如果在定義參數時掛起參數的標識符,可以找到參數的默認值。例如
In [119]: parser=argparse.ArgumentParser()
In [120]: arg1 = parser.add_argument('--fin', default='default.txt')
In [121]: arg1.default
Out[121]: 'default.txt'
arg1
,通過add_argument
方法返回的值是解析器使用Action
對象。它具有您提供給該方法的所有信息。 arg1.default
只是它的一個屬性。
因此,您可以在您的帖子parse_args
中使用arg1.default
來檢查args.fin
是否爲有效文件。
larsks
方法一樣好,因爲您,用戶,首先定義默認值。
你也可以編寫一個自定義的Action類或者進行這種檢查的參數類型。有一個內建的argparse.FileType
嘗試打開該文件,如果不能,則會引發ArgumentType錯誤。這可以修改爲使用默認值。但是這是一個更高級的解決方案,並且不會明顯優於解析後自己進行檢查。