0

この回答のコードの一部、特に発生する部分を使用していargparse.ArgumentTypeErrorます:

raise argparse.ArgumentTypeError(
                "argument '{f}' requires between {nmin} and {nmax} "
                "arguments".format(f=self.dest, nmin=nmin, nmax=nmax))

ただし、appendアクションの動作をサブクラス__call__()に追加しました' ArgumentTypeError

したがって、パーサーでこのような引数にこれを使用すると、次のようになります。

parse = argparse.ArgumentParser()
parser.add_argument("-a", "--append-arg", action=append_range(2,3), default=[])

そして、間違った数の引数を入力するとエラーが発生します。次のような結果が得られます。

argparse.ArgumentTypeError: argument 'append_arg' requires between 2 and 3 arguments

いいですね、そうやって使っていただきたいです。しかし今では、引数のリストはappend_arg名前空間で命名されています。名付けたいlist_of_repeated_argsとかなんとか。だから私がするなら:

parser.add_argument("-a", "--append-arg", action=append_range(2,3), default=[], dest="list_of_repeated_args")

次に、代わりにエラーに対してこれを取得します。

argparse.ArgumentTypeError: argument 'list_of_repeated_args' requires between 2 and 3 arguments

それは私が欲しかったものではありません。確かに、引数として必要な名前を取るように関数を変更できますが、名前を自動的に使用したいと思います。これを行う方法はありますか?(つまり、代わりに何を配置する必要がありf=self.destますか?)

4

1 に答える 1

1

解決策を考え出しました。__call__()カスタムのメソッドには、 docsによると、次argparse.Actionの引数があります。option_string

このアクションを呼び出すために使用されたオプション文字列。引数はオプションであり、option_stringアクションが位置引数に関連付けられている場合は存在しません。

案の定、次のコードを代わりに使用するoption_stringように変更すると:

raise argparse.ArgumentTypeError(
                "argument '{f}' requires between {nmin} and {nmax} "
                "arguments".format(f=option_string, nmin=nmin, nmax=nmax))

私は(省略形を使用していると仮定して)望ましい効果を得る:

argparse.ArgumentTypeError: argument '-a' requires between 2 and 3 arguments
于 2013-07-09T17:56:17.943 に答える