Han*_*olo 9 python exception argparse
从我自己的自定义操作中抛出ArgumentTypeError异常并让argparse为我捕获它的最佳做法是什么?
似乎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)
Run Code Online (Sandbox Code Playgroud)
和
group.add_argument('-c', "--client", nargs = 2,
dest = "servers", action = unique_server_endpoints,
Run Code Online (Sandbox Code Playgroud)
例如,在上面的代码中,如果我有重复的IP,则异常将落入主函数并打印丑陋的堆栈跟踪.我不希望这样,我也不想在main中放置一个try/except块.
Han*_*olo 11
在查看argparse源代码后,我发现它将ArgumentTypeError转换为ArgumentError异常.
所以代替:
raise argparse.ArgumentTypeError("Duplicate OuterIPs found")
Run Code Online (Sandbox Code Playgroud)
我应该:
raise argparse.ArgumentError(self, "Duplicate OuterIPs found")
Run Code Online (Sandbox Code Playgroud)
并且argparse仍然会为我做其余的事情(捕获异常和打印用法消息)...
| 归档时间: |
|
| 查看次数: |
1317 次 |
| 最近记录: |