我有一个函数,它有一个 name1
值,该值是通过 sys.argv.pop()
用户输入获得的,它指示 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,)
最佳答案
您可以使用 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'])
关于Python 字符串/参数操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50614187/