8
自分のカスタムアクションからArgumentTypeError例外をスローし、argparseがそれを捕まえるようにするベストプラクティスは何ですか?カスタムアクションからArgumentTypeError例外をキャッチ
argparseのtry/exceptブロックがカスタムアクションのこの例外を処理しないようです。その組み込みアクションではうまくいきますが、
class unique_server_endpoints(argparse.Action):
"""This class avoids having two duplicate OuterIPs in the client argument list"""
def __call__(self, parser, namespace, values, option_string=None):
ips = set()
endpoints = []
for r in values:
ep = server_endpoint(r)
if ep[0] in ips:
raise argparse.ArgumentTypeError("Duplicate OuterIPs found")
else:
ips.add(ep[0])
endpoints.append(ep)
setattr(namespace, self.dest, endpoints)
と例えば
group.add_argument('-c', "--client", nargs = 2,
dest = "servers", action = unique_server_endpoints,
、私は重複したIPアドレスを持っている希望の場合、上記のコードでは、例外がダウン
メイン機能に落ち、醜いスタックトレースを出力します。私はそれを望んでいないし、どちらもtry/exceptブロックを内部に入れたくない。
メイン。
申し訳ありません私はちょうど "ありがとう"コメントを書いてはいけません。しかし、このニッチな質問は、私が持っていたものと全く同じでした。そして、OPの答えがそれを釘付けにしました! :-) – halloleo