Heim >Backend-Entwicklung >Python-Tutorial >Wie kann ich boolesche Werte in argparse korrekt analysieren?

Wie kann ich boolesche Werte in argparse korrekt analysieren?

Linda Hamilton
Linda HamiltonOriginal
2024-10-26 18:56:29681Durchsuche

How Can I Parse Boolean Values Correctly in argparse?

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 “ lautet Es können gewünschte, benutzerdefinierte Typkonvertierungsfunktionen eingesetzt werden:

<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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn