我在Python3中使用this.Then(/^I should see at least one element in each container$/, function () {
page.element.all(by.css('.container'))
.each(function (ele, index) {
ele.$$('.row') // get all the row elements in each div
.then(function(elements) {
expect(elements.length).to.be.greaterThan(0);
});
});
});
模块。解析后的参数的结果将作为argparse
对象返回。但我希望将它们放在当前的命名空间中而不是另一个。
Namespace
有办法解决这个问题吗? 或者我必须自己手动制作:
#!/usr/bin/env python3
import argparse
parser = argparse.ArgumentParser(description='desc')
parser.add_argument('--profile', dest='profile_name', help='help')
# I need the magic here
print( parser.parse_args(namespace=self) )
print(profile_name)
答案 0 :(得分:1)
您可能会混淆“命名空间”的两种用法。
一个namespace
是包含此模块或函数变量的字典。
parser.parse_args()
创建一个argparse.Namespace
对象,并使用setattr
将其值放入其中。这个类定义非常简单。
parser.parse_args(namespace=myNamespace)
应与任何接受setattr
,getattr
和hasattr
方法的对象一起使用。字典不起作用。
如果给出字典,我得到的第一个错误是
setattr(namespace, action.dest, default)
AttributeError: 'dict' object has no attribute 'checked'
您是否这样问,因为您想将argparse
属性直接放在本地命名空间字典中?
您可以使用vars(args)
将命名空间转换为字典。您可以使用update
(例如locals().update(vars(args))
)将这些项目添加到另一个词典中。
或者如果你有一个带**kwargs
的函数,你可以使用:foo(**vars(args))
将这些参数放入函数的命名空间。这样可以更好地本地化变更。它还允许您使用普通关键字语法定义变量。
答案 1 :(得分:0)
我不推荐这个,因为它可以覆盖以前定义的变量,特别是如果你想要的只是输入几个字符,但你可以添加变量到全局范围如下:
args = parser.parse_args()
for k, v in args.__dict__.items():
globals()[k] = v
print(profile_name)