python:AttributeError,'module'对象没有属性'something'

时间:2011-10-07 11:39:17

标签: python command-line attributes

之前我问了一个问题here。该问题已解决,但在开发脚本时出错。

目前,可以从命令行获取选项,如:

... -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 个答案:

答案 0 :(得分:4)

bench_name是一个字符串,而不是标识符,因此您需要使用getattr()

process.append(getattr(Mybench, bench_name))

答案 1 :(得分:2)

对我而言,有以下区别:
  - process.b1
  - process.bench_name =>过程。 “B1”

getattr()可能是你遗嘱的关键。