8
從我自己的自定義操作中拋出ArgumentTypeError異常並讓argparse爲我捕獲它的最佳做法是什麼?從自定義操作中捕獲ArgumentTypeError異常
似乎argparse的try/except塊不處理我的自定義操作的這個異常。雖然它的內置操作確實很好。
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代碼,然後異常會倒下來的主功能和打印醜陋的堆棧跟蹤。我不想這樣,我也不想在主裏放一個try/except塊。
對不起,我知道,我不應該只寫一個「謝謝」的評論。但是,這個小衆問題恰恰是*我所擁有的 - 而OP的答案就是它! :-) – halloleo 2014-05-08 06:07:21