2017-06-15 69 views
0

這裏是最簡單的python腳本,如後命名test.pypython3:爲什麼在argparse中,'True'總是'True'?

import argparse 

parser = argparse.ArgumentParser() 
parser.add_argument('--bool', default=True, type=bool, help='Bool type') 
args = parser.parse_args() 
print(args.bool) 

但是當我運行這段代碼在命令行:

python test.py --bool False 
True 

而當 '-bool' defalut =在我的假代碼,事情看起來沒問題,argparse運行正常。

爲什麼?

非常感謝。

回答

6

您未通過False對象。你傳遞的是'False'字符串,這是一個非零長度的字符串。

只有長度的字符串0測試爲假:

>>> bool('') 
False 
>>> bool('Any other string is True') 
True 
>>> bool('False') # this includes the string 'False' 
True 

使用store_true or store_false action代替。對於default=True,使用store_false

parser.add_argument('--bool', default=True, action='store_false', help='Bool type') 

現在省去了開關設置args.boolTrue,使用--bool(有沒有進一步的說法)設置args.boolFalse

python test.py 
True 

python test.py --bool 
False 

如果必須分析字符串與TrueFalse在它,你必須明確這樣做:

def boolean_string(s): 
    if s not in {'False', 'True'}: 
     raise ValueError('Not a valid boolean string') 
    return s == 'True' 

和使用,作爲轉換參數:

parser.add_argument('--bool', default=True, type=boolean_string, help='Bool type') 

在其中,你期望它點--bool False會工作。

相關問題