parser.add_argument('-auto', action='store_true')
Wie kann ich false speichern, wenn -auto
es nicht angegeben ist? Ich kann mich schwach daran erinnern, dass auf diese Weise None gespeichert wird, wenn nicht angegeben
parser.add_argument('-auto', action='store_true')
Wie kann ich false speichern, wenn -auto
es nicht angegeben ist? Ich kann mich schwach daran erinnern, dass auf diese Weise None gespeichert wird, wenn nicht angegeben
Die store_true
Option erstellt automatisch den Standardwert False .
Ebenso store_false
wird standardmäßig True verwendet, wenn das Befehlszeilenargument nicht vorhanden ist.
Die Quelle für dieses Verhalten ist prägnant und klar: http://hg.python.org/cpython/file/2.7/Lib/argparse.py#l861
Die Argparse-Dokumente zu diesem Thema sind nicht klar, daher werde ich sie jetzt aktualisieren: http://hg.python.org/cpython/rev/49677cc6d83a
-bar
, diedest
automatisch aufbar
basierend auf hg.python.org/cpython/rev/49677cc6d83a gesetzt wird . Ich sehe jedoch nicht, wo dieses Standardverhalten im Code festgelegt ist. Ich habe dasdest
Argument immer explizit gesetzt. Ich denke auch, dass es nicht wirklich Sinn macht , diebar
Standardeinstellungdest
für die--bar
Option zu verwenden, wenn dies der Fall--bar
iststore_false
. Sollte dasdest
nichtnotbar
in diesem Fall sein?Mit
Laufen
ergibt
Es scheint also
False
standardmäßig zu speichern .quelle
Raymond Hettinger beantwortet die Frage von OP bereits.
Bei meiner Gruppe sind jedoch Lesbarkeitsprobleme mit "store_false" aufgetreten. Besonders wenn neue Mitglieder unserer Gruppe beitreten. Dies liegt daran, dass es am intuitivsten zu denken ist, dass, wenn ein Benutzer ein Argument angibt, der diesem Argument entsprechende Wert True oder 1 ist.
Zum Beispiel, wenn der Code - ist
Der Codeleser kann wahrscheinlich erwarten, dass die Protokollierungsanweisung deaktiviert ist, wenn der Wert in stop_logging wahr ist. Code wie der folgende führt jedoch zum Gegenteil des gewünschten Verhaltens -
Wenn andererseits die Schnittstelle wie folgt definiert ist, funktioniert die "if-Anweisung" und ist intuitiver zu lesen -
quelle
parser.add_argument('--stop_logging', action='store_false', dest='use_logging')
.store_false wird
0
standardmäßig verwendet (Sie können testen, um dies zu überprüfen). Um die Standardeinstellungen zu ändern, fügendefault=True
Sie einfach Ihre Erklärung hinzu.Also in diesem Fall:
parser.add_argument('-auto', action='store_true', default=True)
quelle
>>> 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)