質問: Pythonで 'argparse.ArgumentError'を使う Pythonの `argparse` モジュールで `ArgumentError` 例外を使用したいのですが、どのように使用するのか分かりません。このシグネチャは、 `ArgumentError(argument、message)`として呼び出されるべきだと言いますが、`引数`がどのようなものであるべきかわかりません。私はそれがパーサーオブジェクトの一部であるべきだと思うが、私はそれについてのドキュメントを見つけることができなかった。
回答: ソースドキュメントから: > > > ArgumentError:パーサーのアクションにエラーがある場合に、ArgumentParserオブジェクトによって生成された例外です。コマンドラインの解析中に発生したエラーは、ArgumentParserによって捕捉され、コマンドラインメッセージとして出力されます。 > > > コンストラクタの `argument` パラメータは、例外が発生した `Action` オブジェクトです。通常、 `Action` サブクラスの外にそれを呼び出す必要はなく、サブクラス化するときに明示的に呼び出す必要はありません。通常は `ValueError` (またはそれ以外のもの)を作成します。 ### 0と1の間の浮動小数点値 あなたのコメントに関しては、0と1の間の浮動小数点値だけを受け入れたいと思っています。このために、カスタム型を定義する能力を使うべきです。例えば、次のようにすることができます: ``` def percentFloat (string): value = float(string) if value < 0 or value > 1: raise argparse.ArgumentTypeError('Value has to be between 0 and 1') return value parser = argparse.ArgumentParser() parser.add_argument('test', type=percentFloat) parser.parse_args() ``` `float(string)`は、 `argparseによって無効な型エラーを引き起こす非浮動小数点数に対して` ValueError を発生させるので、非浮動小数点に対しても安全ですモジュールです。 `ArgumentTypeError` は単なる指定方法ですカスタムエラーメッセージ。 ### 相互に排他的なパラメータ For 相互に排他的なパラメータ, you should use `argparse.add_mutually_exclusive_group`. ### パラメータの依存性 パラメータの依存性 isn’t really something that should be done by the argument *parser*. For semantic details, you should instead simply do it yourself: ``` args = parser.parse_args() if args.w and not args.p: parser.error('-p is required when -w is set.') ``` `ArgumentParser.error` を使用してカスタムを呼び出すことができますエラーメッセージが表示され、プログラムが中断され、コンソールに出力されます。 しかしもちろん、このような基本的な状況では、できるだけ暗黙のうちに `-p` を推測するほうがはるかに意味があります。