Перехват исключения ArgumentTypeError из пользовательского действия

Как лучше всего генерировать исключение 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.

9
задан Hans Solo 27 March 2012 в 00:52
поделиться