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
Freigeben: 2024-10-26 18:56:29
Original
679 Leute haben es durchsucht

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage