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!