2015-07-09 44 views
0

我想在Python argparse中使用默認值而不是用戶指定的參數。例如,這裏有一個說法:Argparse使用默認值,而不是參數

parser.add_argument(「 - 翅」,默認值=「file.txt的」)

如果用戶呼叫--fin狗,這顯然不是一個文件,所以我希望能夠使用默認值。我會怎麼做? argparse是否有一個使用默認值而不是輸入參數的函數?對於任何輸入錯誤也很抱歉,我正在通過電話進行操作。

回答

4

使用來自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) 

雖然我認爲,如果用戶指定的命令行上的文件名和你無法打開它,那麼你應該打印一個錯誤並退出。

0

您可以:

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解決方案。

0

如果在定義參數時掛起參數的標識符,可以找到參數的默認值。例如

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錯誤。這可以修改爲使用默認值。但是這是一個更高級的解決方案,並且不會明顯優於解析後自己進行檢查。

相關問題