Python String / Аргумент Манипуляция - PullRequest
0 голосов
/ 31 мая 2018

У меня есть функция, которая имеет значение 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,)

1 Ответ

0 голосов
/ 31 мая 2018

Этого можно добиться, используя 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 вы хотите использовать значение по умолчанию, вы можете использовать ключевое слово default для getattr:

default = dict(lower_bound=20, upper_bound=50)
values = getattr(myconfig, name1, default=default)
self.do_x(values['lower_bound'], values['upper_bound'])
...