Boolesche Werte mit argparse analysieren
In argparse ist das Parsen von booleschen Befehlszeilenargumenten eine häufige Aufgabe, aber bei diesem Versuch tritt häufig eine Falle auf um Werte wie „--foo True“ oder „--foo False“ mithilfe des Arguments type=bool zu analysieren. Überraschenderweise wird der analysierte Wert selbst bei Verwendung einer leeren Zeichenfolge als Argument (z. B. „--foo „“) als „True“ ausgewertet.
Für eine korrekte boolesche Analyse bietet argparse zwei empfohlene Ansätze:
Kanonischer Ansatz:
Verwenden Sie die Syntax „--feature“ und „--no-feature“, die nativ von argparse 3.9 und höher unterstützt wird:
<code class="python">parser.add_argument('--feature', action=argparse.BooleanOptionalAction)</code>
In Python-Versionen unter 3.9:
<code class="python">parser.add_argument('--feature', action='store_true') parser.add_argument('--no-feature', dest='feature', action='store_false') parser.set_defaults(feature=True)</code>
Bei diesem Ansatz setzt das Vorhandensein von „--feature“ den Wert auf True, während „--no-feature“ ihn auf False setzt. Das Fehlen eines der beiden Argumente ist standardmäßig „True“.
Optionaler Ansatz (mit Typkonvertierung):
Wenn die Syntax „--arg
<code class="python">parser.add_argument("--arg", type=ast.literal_eval)</code>
Alternativ kann eine benutzerdefinierte Funktion erstellt werden:
<code class="python">def true_or_false(arg): ua = str(arg).upper() if 'TRUE'.startswith(ua): return True elif 'FALSE'.startswith(ua): return False else: raise argparse.ArgumentTypeError('Invalid boolean value')</code>
Das obige ist der detaillierte Inhalt vonWie kann ich boolesche Werte in argparse korrekt analysieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!