ArgumentError
Python のモジュールで例外を使用したいのですargparse
が、使い方がわかりません。シグネチャには として呼び出す必要があると書かれていますArgumentError(argument, message)
が、何をすればよいのかわかりませんargument
。パーサー オブジェクトの一部であるはずだと思うのですが、それに関するドキュメントが見つかりませんでした。
ベストアンサー1
からソースドキュメント:
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)
発生させValueError
、モジュールによって無効な型エラーもトリガーしますargparse
。ArgumentTypeError
は、カスタム エラー メッセージを指定する方法にすぎません。
相互に排他的なパラメータ
相互に排他的なパラメータの場合は、argparse.add_mutually_exclusive_group
。
パラメータ依存性
パラメータ依存性は、実際には引数によって行われるべきものではない。パーサー意味の詳細については、代わりに自分で行う必要があります。
args = parser.parse_args()
if args.w and not args.p:
parser.error('-p is required when -w is set.')
使用できますArgumentParser.error
プログラムを中断してコンソールに出力するカスタム エラー メッセージを生成します。
-p
しかし、もちろん、このような基本的な状況では、可能であれば暗黙的に推測する方がはるかに理にかなっています。