Qual è la procedura migliore per generare un'eccezione ArgumentTypeError dalla mia azione personalizzata e lasciare che argparse lo prenda per me?Catching ArgumentTypeError exception from custom action
Sembra che il blocco try/except di argparse non gestisca questa eccezione per le mie azioni personalizzate. Anche se lo fa bene per le sue azioni integrate.
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)
e
group.add_argument('-c', "--client", nargs = 2,
dest = "servers", action = unique_server_endpoints,
Ad esempio, nel codice di cui sopra Se avrei IP duplicati quindi l'eccezione sarebbe caduta giù per la principale funzione di e stampare il brutto stacktrace. Non lo voglio e nemmeno io non voglio provare, tranne il blocco all'interno di principale.
Spiacente , Dovrei * non * scrivere solo un commento "Grazie", lo so. Ma questa domanda di nicchia era * esattamente * quella che avevo - e la risposta dell'OP lo inchioda! :-) – halloleo