1

所以我有 class Foo,它包含 3 个字段: integersstartendstring name

我想Foo从 argparse 中获取 s 列表,使用如下输入

my_program --foo 5 7 first --foo 10 12 second.

parser.add_argument('--foo', action='append', default=[], nargs=2)非常接近,它将返回列表列表[['5', '7', 'first'], ['10', '12', 'second']]

我尝试添加 type=Foo,但它尝试转换每个参数。
[[Foo('5'), Foo('7'), Foo('first')], ...]我想在 argparse 中执行转换 + 验证。可能吗?

4

1 回答 1

1

这是你要找的吗?作为记录,我同意在解析后验证它更容易和更清晰。

import argparse


class foo():
    def __init__(self, a, b, c):
        self.a = a
        self.b = b
        self.c = c

class CustomAction(argparse.Action):
    def __call__(self, parser, namespace, values, option_string=None):
        foos.append(foo(*values))

foos = []
parser = argparse.ArgumentParser()
parser.add_argument('--foo', action=CustomAction, default=[], nargs=3)
parser.parse_args()

for x in foos:
    print(x.a, x.b, x.c)
于 2020-01-03T21:15:45.657 回答