parser.add_argument('-auto', action='store_true')
Jak mogę zapisać wartość false, jeśli -auto
jest nieokreślona? Mogę słabo pamiętać, że w ten sposób, że przechowuje None jeśli nieokreśloneprzechowywanie w argparse false, jeśli nieokreślone
parser.add_argument('-auto', action='store_true')
Jak mogę zapisać wartość false, jeśli -auto
jest nieokreślona? Mogę słabo pamiętać, że w ten sposób, że przechowuje None jeśli nieokreśloneprzechowywanie w argparse false, jeśli nieokreślone
Opcja store_true
automatycznie tworzy domyślną wartość False.
Podobnie,będzie domyślnie True, gdy argument linii poleceń nie jest obecny.
Źródłem tego problemu jest zwięzłe i jasne: http://hg.python.org/cpython/file/2.7/Lib/argparse.py#l861
The argparse docs nie są jasne w tej sprawie, więc będę aktualizować je teraz: http://hg.python.org/cpython/rev/49677cc6d83a
Z
import argparse
parser=argparse.ArgumentParser()
parser.add_argument('-auto', action='store_true',)
args=parser.parse_args()
print(args)
działa
% test.py
daje
Namespace(auto=False)
Więc wydaje się być przechowywanie False
domyślnie .
store_false faktycznie domyślnie 0
przez domyślny (możesz przetestować, aby zweryfikować). Aby zmienić domyślne ustawienia, dodaj do swojej deklaracji default=True
.
Więc w tym przypadku: parser.add_argument('-auto', action='store_true', default=True)
Nie wygląda to tak, jak w Pythonie 2.7 i 3.4: '>>> parser.add_argument ('- bar', action = 'store_false')' '_StoreFalseAction (option_strings = ['- bar '], dest =' bar ', nargs = 0, const = False, default = True, type = None, choices = None, help = None, metavar = None) ' ' >>> parser.parse_args ([]) ' ' Namespace (bar = True) ' – Leynos
Przepraszam, to jest domyślne zachowanie systemu optparse. argparse powinien domyślnie odwrotność sklepu. to jest "store_false" domyślnie "True". –
Kilka uwag na ten temat. Po pierwsze, wydaje się, że jeśli opcja jest '-bar', to' dest' jest automatycznie ustawiane na 'bar', na podstawie http://hg.python.org/cpython/rev/49677cc6d83a. Jednak nie widzę, gdzie jest ustawione domyślne zachowanie w kodzie. Zawsze ustawiałem jawnie argument "dest". Ponadto, myślę, że ustawienie 'bar' domyślnego' dest' dla opcji '--bar' nie ma większego sensu, jeśli' --bar' to 'store_false'. Czy w tym przypadku 'not' nie powinien być' notbar'? –