如何在Python2.x中合并两个argparse名称空间? [英] How can I merge two argparse Namespaces in Python 2.x?

查看:16
本文介绍了如何在Python2.x中合并两个argparse名称空间?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我要合并Python2.x中的2个argparse.Namespace对象。

在python3.x中,我可以这样做:

from argparse import Namespace

# The 2 initial objects
options_foo = Namespace(foo="foo")
options_bar = Namespace(bar="bar")

# the merged object
options_baz = Namespace(**vars(options_foo), **vars(options_bar))

和GET:

print(options_baz)
# Namespace(foo="foo", bar="bar")

但在python2.x中我不能。我得到以下错误。

SyntaxError: invalid syntax

有什么简单的方法可以做到这一点吗?

推荐答案

我主要重新考虑了这个答案,因为我没有完全阅读和理解您的问题...

此行在Python3中有效,在Python2中无效:

options_baz = Namespace(**vars(options_foo), **vars(options_bar))

当我们查看错误时,我们看到是逗号(,)是Python2不能接受的:

  File "main.py", line 8
    options_baz = Namespace(**vars(options_foo), **vars(options_bar))
                                               ^
SyntaxError: invalid syntax

因此,我们只需避免将两组选项传递给Namespace()初始值设定项:

...

dict_baz = vars(options_foo)
dict_baz.update(vars(options_bar))

# the merged object
options_baz = Namespace(**dict_baz)

print(options_baz)

我们得到:

Namespace(bar='bar', foo='foo')

在另一个答案中,您指出双星(**)语法无效,但这绝对是有效的语法。我们可以看到它最早被提到Python 2.2

如果语法**expression出现在函数调用中, expression必须计算为字典(的子类)...

一直都是那个逗号。

这篇关于如何在Python2.x中合并两个argparse名称空间?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆