¿Cuál es la mejor práctica para lanzar una excepción ArgumentTypeError de mi propia acción personalizada y dejar que el argparse la atrape?Captura de excepción de ArgumentTypeError de la acción personalizada
Parece que el bloque try/except de argparse no maneja esta excepción para mis acciones personalizadas. Aunque funciona bien para sus acciones integradas.
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)
y
group.add_argument('-c', "--client", nargs = 2,
dest = "servers", action = unique_server_endpoints,
Por ejemplo, en el código anterior Si tuviera IP duplicadas a continuación la excepción caería hasta el función principal e imprimir el StackTrace feo. No quiero eso y tampoco quiero poner un bloque try/except dentro del principal.
este momento , Debería * no * escribir solo un comentario de "Gracias", lo sé. Pero esta pregunta de nicho fue * exactamente * la que tuve - ¡y la respuesta del OP la clava! :-) – halloleo