python: AttributeError, объект «модуль» не имеет атрибута «что-то» - PullRequest
0 голосов
/ 07 октября 2011

Ранее я задавал вопрос здесь .Эта проблема решена, но при разработке сценария произошла ошибка.

В настоящее время из командной строки получается параметр, например:

... -b b1

при обработке кода:

import Mybench, optparse
parser.add_option("-b", "--benchmark", default="", help="The benchmark to be loaded.")  
if options.benchmark == 'b1':
   process = Mybench.b1
elif options.benchmark == 'b2':
   process = Mybench.b2
...
else:
   print "no such benchmark!"

Теперь я изменился, так что в «-b» передается более одной опции.

... -b b1,b2

Код для этого:

process = []
benchmarks = options.benchmark.split(',')
for bench_name in benchmarks:
   print bench_name
   process.append(Mybench.bench_name)

Если вы заметили, впервый код, процесс получает значение следующим образом:

process = Mybench.b1

Теперь я пишу это:

process.append(Mybench.bench_name)

Я ожидаю, что эта командная строка:

... -b b1,b2

результатыв:

process[0] = Mybench.b1
process[1] = Mybench.b2

Однако я получаю эту ошибку:

process.append(Mybench.bench_name)
AttributeError: 'module' object has no attribute 'bench_name'

Есть ли какое-либо решение для этого?

Ответы [ 2 ]

4 голосов
/ 07 октября 2011

bench_name - это строка, а не идентификатор, поэтому вам нужно использовать getattr():

process.append(getattr(Mybench, bench_name))
2 голосов
/ 07 октября 2011

Для меня есть разница между:
- process.b1
- process.bench_name => process. "b1"

getattr () может быть ключом вашей воли.

...