Как лучше всего создавать исключение ArgumentTypeError из моего собственного настраиваемого действия и разрешать argparse отлавливать его для меня?
Похоже, что блок try / исключением от argparse не обрабатывает это исключение для моих пользовательских действий. Хотя он прекрасно справляется со своими встроенными действиями.
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-адреса, то исключение упало бы до функции main и напечатало бы некрасивую трассировку стека. Я не хочу этого, и при этом я не хочу помещать блок попытки / кроме внутри main .