Groß-und Kleinschreibung argparse Entscheidungen
Ist es möglich zu überprüfen, argparse Entscheidungen in Kleinschreibung?
import argparse
choices = ["win64", "win32"]
parser = argparse.ArgumentParser()
parser.add_argument("-p", choices=choices)
print(parser.parse_args(["-p", "Win32"]))
Ergebnisse in:
usage: choices.py [-h] [-p {win64,win32}]
choices.py: error: argument -p: invalid choice: 'Win32' (choose from 'win64','win32')
Du musst angemeldet sein, um einen Kommentar abzugeben.
Transformation des Arguments in Kleinbuchstaben um, indem
für die
-p
wechseln.Wie bereits von chepner in die Kommentare, da
str.lower
ist bereits eine entsprechende Funktion, die lambda-wrapper ist nicht zwingend notwendig und könnten Sie stattdessen verwenden Sie einfachdirekt.
type = str.lower
, dastr.lower
ist eine Funktion, die einen string und gibt ihn in Kleinbuchstaben.string
Modul. Beachten Sie, dassstr.lower
(ohneing
) benutzt wird, ist die Methode derstr
Klasse unterself
als einzigen parameter, das ist der Grund, warum der trick funktioniert.self
.obj.method(*args, **kwargs)
ist zum größten Teil identisch mittype(obj).method(obj, *args, **kwargs)
.str.lower
sollte Recht genannt werden eine Funktion, weil keiner seine Argumente gebunden sind, in der Erwägung, dassobj.lower
ist eine Methode, weilobj
gebunden ist als das erste argument.Mit
lower
imtype
ist schöner Weg, dies zu tun, wenn es Ihnen nichts ausmacht zu verlieren, der Fall Informationen.Wenn Sie behalten wollen, der Fall ist, könnten Sie eine benutzerdefinierte
choices
Klasse. Diechoices
braucht es zwei Methoden,__contains__
(für die Prüfungin
), und die iteration (Liste der Entscheidungen).Hilfe ist:
choices = mylist(map(str.lower, ['win64', 'win32']))
oder überschreiben__init__
um dies zu tun.Halten den Fall Informationen wäre auch möglich mit einem one-liner:
Wo Entscheidungen wäre die gleiche Liste wie an die Wahl der parameter.