Wie gehe ich mit booleschen Argumenten mit argparse in Python richtig um?

Susan Sarandon
Freigeben: 2024-10-28 08:11:30
Original
477 Leute haben es durchsucht

How to Properly Handle Boolean Arguments with argparse in Python?

Umgang mit booleschen Argumenten in argparse

Das Parsen von Argumenten über die Befehlszeile kann mithilfe des argparse-Moduls in Python vereinfacht werden. Obwohl es das Parsen boolescher Flags unterstützt, können bestimmte Szenarien zu unerwarteten Ergebnissen führen.

Um boolesche Werte wie „--foo True“ oder „--foo False“ korrekt zu parsen, reicht das Standardverhalten von argparse möglicherweise nicht aus. Beispielsweise kann die alleinige Verwendung von type=bool zu unerwarteten Ergebnissen führen, wenn Argumente auf „False“ oder leere Zeichenfolgen gesetzt sind.

Eine Lösung besteht darin, die in Python 3.9 eingeführte BooleanOptionalAction zu nutzen. Diese Aktion ermöglicht eine intuitivere Handhabung boolescher Werte und konvertiert True, t, y, yes und 1 automatisch in True und False, f, n, no und 0 in False.

Für Python-Versionen früher 3.9 besteht eine Problemumgehung darin, die Aktionen „store_true“ und „store_false“ zu kombinieren. Die Aktion „store_true“ setzt ein Flag auf „True“, wenn es vorhanden ist, während „store_false“ es auf „False“ setzt. Standardmäßig wird davon ausgegangen, dass das Flag „True“ ist, sodass Benutzer sowohl positive als auch negative Flags angeben können:

<code class="python">import argparse

parser = argparse.ArgumentParser(description="My parser")
parser.add_argument('--feature', action='store_true')
parser.add_argument('--no-feature', dest='feature', action='store_false')
parser.set_defaults(feature=True)

cmd_line = ["--no-feature"]
parsed_args = parser.parse_args(cmd_line)

if parsed_args.feature:
    print("Feature is True.")
else:
    print("Feature is False.")</code>
Nach dem Login kopieren

Alternativ können benutzerdefinierte Funktionen definiert werden, um eine bestimmte Parsing-Logik zu verarbeiten. Zum Beispiel eine Funktion, die zwischen „True“ und „False“ unterscheidet, ohne Berücksichtigung der Groß- und Kleinschreibung:

<code class="python">def t_or_f(arg):
    ua = str(arg).upper()
    if 'TRUE'.startswith(ua):
        return True
    elif 'FALSE'.startswith(ua):
        return False
    else:
        raise ValueError("Invalid argument: {}".format(arg))</code>
Nach dem Login kopieren

Diese Funktion kann dann mit dem Typparameter von argparse verwendet werden:

<code class="python">import argparse

parser = argparse.ArgumentParser(description="My parser")
parser.add_argument('--my_bool', type=t_or_f)

cmd_line = ["--my_bool", "False"]
parsed_args = parser.parse_args(cmd_line)

if parsed_args.my_bool:
    print("my_bool is True.")
else:
    print("my_bool is False.")</code>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie gehe ich mit booleschen Argumenten mit argparse in Python richtig um?. 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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!