我有一个函数,它有一个通过用户通过sys.argv.pop()
输入获得的name1
值,该值指定在myconfig.py
中使用哪个参数。作为python的新手,我想知道做这件事的正确方法是什么,这样我才能正确地访问所需的数据。
完成后,我希望参数的函数形式为:myconfig.Oink['lower_bound']
或myconfig.Woof['lower_bound']
> self.do_x(id, myconfig."name1".format(name1)['lower_bound'],
> myconfig."name1".format(name1)['upper_bound'])
> ^ SyntaxError: invalid syntax
__________________________________________________________________
> myconfig.py
>
> Oink = dict(lower_bound = 874,upper_bound = 1983,)
> Woof = dict(lower_bound = 1,upper_bound = 984,)
发布于 2018-05-31 07:04:09
您可以使用getattr
来实现这一点
name1 = sys.argv.pop()
# ...
values = getattr(myconfig, name1)
self.do_x(values['lower_bound'], values['upper_bound'])
请注意,getattr
区分大小写,这意味着虽然getattr(myconfig, 'Oink')
将生成正确的值,但getattr(myconfig, 'oink')
将引发AttributeError
如果要处理无效值,可以使用hasattr
if not hasattr(myconfig, name1):
raise ValueError('Invalid value {}'.format(name1))
values = getattr(myconfig, name1)
self.do_x(values['lower_bound'], values['upper_bound'])
如果您希望使用默认值而不是引发ValueError
,则可以对getattr
使用default
关键字参数
default = dict(lower_bound=20, upper_bound=50)
values = getattr(myconfig, name1, default=default)
self.do_x(values['lower_bound'], values['upper_bound'])
https://stackoverflow.com/questions/50614187
复制相似问题