私は、ユーザーが関数名を渡すことを可能にしようとしています。何らかの理由で、argparseは型チェック/変換を実行してから選択肢をチェックするようです。これはバグですか?一番いいことは?タイプの前にPython argparseチェックの選択
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())
これはスロー:
$ 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')
実行されたので、 選択コンテナ内のオブジェクトのタイプは、指定されたタイプと一致する必要があります。 ' – wnnmaw