いくつかの以前の質問:
Python argparse and controlling/overriding the exit status code
I want Python argparse to throw an exception rather than usage
、おそらくより。
argparseのドキュメントでは、parse_known_args
の使用について説明しています。これは、認識できない引数のリストを返します。 1つのタイプのエラーを処理する便利な方法です。
また、独自のerror
とexit
メソッドの作成方法についても説明します。あなたが好きではないそのエラーは、それらの2つの方法を通過します。それらを変更する適切な方法はサブクラスArgumentParser
ですが、既存のパーサーをサルキーパッチすることもできます。デフォルトのバージョンはargparse.py
ファイルの末尾にあるので、あなたが行っていることを勉強することができます。
3番目のオプションは、Systemexitを試してみることです。
try:
parser=argparse.ArgumentParser()
args=parser.parse_args()
except SystemExit:
exc = sys.exc_info()[1]
print(exc)
このようにして、エラー/終了によってエラーメッセージ(sys.stderr)が生成されますが、終了をブロックしてその他のことを行うことができます。以前の質問の
1649:~/mypy$ python stack38340252.py -x
usage: stack38340252.py [-h]
stack38340252.py: error: unrecognized arguments: -x
2
一つはparser.error
はエラーに関する多くの情報を取得していないことを訴えました。
def myerror(message):
print('error message')
print(message)
parser=argparse.ArgumentParser()
parser.error = myerror
args=parser.parse_args()
ディスプレイ
1705:~/mypy$ python stack38340252.py -x
error message
unrecognized arguments: -x
あなたは-x
が認識できない文字列である見つけるためにそのメッセージを解析できます。それだけでフォーマットされたメッセージを取得します。以前のバージョンに比べて改善では、エラーメッセージをトリガすることができ、すべてのケースを見てself.error
を見上げて、複数の引数
1705:~/mypy$ python stack38340252.py foo -x abc -b
error message
unrecognized arguments: foo -x abc -b
を一覧表示することができます。より多くのアイデアが必要な場合は、特定のタイプのエラーに焦点を当てます。
unrecognized arguments
エラーがparse_known_args
を呼び出し、extras
が空でない場合、このエラーが発生parse_args
、により製造される
===============。その特別な情報はparse_known_args
が処理できなかった文字列のリストです。
parse_known_args
は、ArgumentError
をトラップする場合はself.error
を呼び出します。一般的には、特定の引数(Action)に問題があるときに生成されます。しかし、_parse_known_args
は、必要に応じてself.error
を呼び出します。アクションが見つからないか、相互排他グループエラーがある場合。 choices
はtype
のように異なるエラーを生成する可能性があります。
あなたがすでに引数にあなたの方法を扱っていることが表示されます:あなたが印刷されましたメッセージ内の無効な引数あなたの問題は何ですか? – Prune
@Prune: 'InvalidArgsError'のようなものはありません。投稿されたコードは実際には機能しません。 – user2357112
私はそのようなエラーはないことを認識します。しかし、OPはうまくいっている。私はレトリックの問題があると思う。ありがとう。 – Prune