Ich versuche, einen Benutzer zu ermöglichen, einen Funktionsnamen zu übergeben. Aus irgendeinem Grund scheint argparse die Typüberprüfung/-konvertierung durchzuführen, BEVOR sie die Auswahlmöglichkeiten prüft. Ist das ein Fehler? Beste Sache zu tun?Python argparse check Auswahl vor Typ
import argparse
def foo():
return 'foo'
def bar():
return 'bar'
parser = argparse.ArgumentParser()
functions = {f.__name__:f for f in [foo, bar]}
parser.add_argument("function", type=lambda f: functions.get(f), help="which function", choices=functions)
args = parser.parse_args()
print(args.function())
Dies wirft:
$ python blah.py foo
usage: blah.py [-h] {foo,bar}
blah.py: error: argument function: invalid choice: <function foo at 0x7f65746dd848> (choose from 'foo', 'bar')
Von [ 'argparse'] (https://docs.python.org/3/library/argparse.html#choices) Dokumentation: ' Beachten Sie, dass die Aufnahme in den Behälter Auswahl wird nach jeder Art geprüft Conversions wurde durchgeführt, so dass der Typ der Objekte im Auswahlcontainer dem angegebenen Typ entsprechen sollte: ' – wnnmaw