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