自定义操作 argparse Python

发布于 2025-01-10 19:47:29 字数 846 浏览 0 评论 0原文

我想对 2 个不同的参数使用相同的自定义操作:

class TestAction(Action):

    def __call__(self, parser, namespace, values, option_string=None):
        car, color, state, code = values
        namespace.car = car
        namespace.color = color
        namespace.state = state
        namespace.code = code

当我定义参数时,我想按如下方式定义它们:

    parser.add_argument('--vehicle', nargs="2", action=TestAction, metavar=('car', 'color'), required=True)
    parser.add_argument('--country', nargs="2", type=tuple(str, int), action=TestAction,metavar=('state', 'code'), required=True)

如果我按照编写的方式使用自定义操作,则会收到以下错误:

ValueError: not enough values to unpack (expected 4, got 2)

I一直试图定义一些虚拟的“_”并在解包时用“_”填充空值,但没有成功。 第二个问题是我想强制代码为整数,但语法 tuple(str, int) 不正确。 有什么想法可以解决这两个问题吗? 谢谢。

I would like to use the same custom action for 2 different arguments:

class TestAction(Action):

    def __call__(self, parser, namespace, values, option_string=None):
        car, color, state, code = values
        namespace.car = car
        namespace.color = color
        namespace.state = state
        namespace.code = code

When I am defining the arguments, I would like to define them as follows:

    parser.add_argument('--vehicle', nargs="2", action=TestAction, metavar=('car', 'color'), required=True)
    parser.add_argument('--country', nargs="2", type=tuple(str, int), action=TestAction,metavar=('state', 'code'), required=True)

If I am using the custom action as it is written, I am getting the following error:

ValueError: not enough values to unpack (expected 4, got 2)

I've been trying to define some dummy '_' and fill the empty values with "_" when unpacking, but it didn't worked.
The second issue is that I would like to force the code to be integer and the syntax tuple(str, int) is not correct.
Any ideas how can I correct these 2 issues?
Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

灼疼热情 2025-01-17 19:47:29

我认为更简单的方法是使用这样的东西(没有 argparse.Action):

import argparse


if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('car', type=str)
    parser.add_argument('color', type=str)
    parser.add_argument('state', type=str)
    parser.add_argument('code', type=int)
    args = parser.parse_args()
    print(args)

输出:

py .\test.py acar acolor acountry 1
>>> Namespace(car='acar', code=1, color='acolor', state='acountry')

I think the easier way is to use something like this (without argparse.Action):

import argparse


if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('car', type=str)
    parser.add_argument('color', type=str)
    parser.add_argument('state', type=str)
    parser.add_argument('code', type=int)
    args = parser.parse_args()
    print(args)

The output:

py .\test.py acar acolor acountry 1
>>> Namespace(car='acar', code=1, color='acolor', state='acountry')
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文