gpt4 book ai didi

python - 从自定义操作中捕获 ArgumentTypeError 异常

转载 作者:太空狗 更新时间:2023-10-29 20:19:08 24 4
gpt4 key购买 nike

从我自己的自定义操作中抛出 ArgumentTypeError 异常并让 argparse 为我捕获它的最佳做法是什么?

argparse 的 try/except block 似乎没有为我的自定义操作处理此异常。尽管它的内置操作做得很好。

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,那么异常将落到 ma​​in 函数并打印丑陋的堆栈跟踪。我不想这样,我也不想在 ma​​in 中放置一个 try/except block 。

最佳答案

在查看 argparse 源代码后,我发现它将 ArgumentTypeError 转换为 ArgumentError 异常。

所以代替:

            raise argparse.ArgumentTypeError("Duplicate OuterIPs found")

我应该:

            raise argparse.ArgumentError(self, "Duplicate OuterIPs found")

argparse 仍然会为我完成剩下的工作(捕获异常并打印使用信息)...

关于python - 从自定义操作中捕获 ArgumentTypeError 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9881933/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com