Heim  >  Artikel  >  Backend-Entwicklung  >  So analysieren Sie boolesche Befehlszeilenargumente mit argparse: Warum bedeutet „--foo False' nicht immer „Falsch'?

So analysieren Sie boolesche Befehlszeilenargumente mit argparse: Warum bedeutet „--foo False' nicht immer „Falsch'?

Linda Hamilton
Linda HamiltonOriginal
2024-10-31 12:26:03509Durchsuche

How to Parse Boolean Command-Line Arguments with argparse: Why

Boolesche Befehlszeilenargumente mit argparse analysieren

Bei der Verwendung von argparse zum Parsen boolescher Argumente können Benutzer auf Herausforderungen stoßen, wenn sie Werte als „ --foo True“ oder „--foo False“. Trotz der intuitiven Annahme, dass „--foo False“ als „False“ ausgewertet werden sollte, interpretiert argparse es als „True“. Dieses Verhalten tritt auch auf, wenn eine leere Zeichenfolge für das boolesche Argument eingegeben wird.

Um dieses Problem zu beheben, bietet argparse alternative Parsing-Optionen für boolesche Flags:

1. Action=argparse.BooleanOptionalAction (Python 3.9)

Durch die Angabe von action=argparse.BooleanOptionalAction interpretiert argparse automatisch das Vorhandensein des Flags ohne Argument als True und sein Fehlen als False. Zum Beispiel:

<code class="python">parser.add_argument('--feature', action=argparse.BooleanOptionalAction)</code>

2. Store_True und Store_False

Für Python-Versionen vor 3.9 kann der folgende Ansatz verwendet werden:

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

Dadurch können Benutzer eine Funktion aktivieren oder deaktivieren, indem sie „--feature“ übergeben " bzw. "--no-feature".

3. Benutzerdefinierte Typfunktion

Auf Wunsch kann eine benutzerdefinierte Typfunktion für die boolesche Analyse verwendet werden. Hier ist ein Beispiel:

<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 input")</code>

Diese Funktion kann dann als Typargument verwendet werden, wenn das boolesche Argument zum Parser hinzugefügt wird.

Durch die Verwendung dieser Methoden können Benutzer boolesche Befehle effektiv analysieren. Zeilenargumente und stellen Sie sicher, dass Werte wie „False“ korrekt interpretiert werden.

Das obige ist der detaillierte Inhalt vonSo analysieren Sie boolesche Befehlszeilenargumente mit argparse: Warum bedeutet „--foo False' nicht immer „Falsch'?. 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