我正在尝试使用生成器在我的代码中使用 getattr
函数
li=[]
m=[method for method in dir(li) if callable(getattr(li,method))]
print getattr(li,(str(i) for i in m))
< 强度 > 错误 强度 > :
TypeError: getattr(): attribute name must be string
如果我对i使用字符串强制, 为什么出现这个错误?
而且,如果我使用代码
li=[]
m=[method for method in dir(li) if callable(getattr(li,method))]
for i in range(10):
print getattr(li,str(m[i]))
那末,没有迷误,
我是新来的Python,如果我犯了非常基本的错误 请原谅我,请有人详细解释一下这个错误。谢谢。
< 强势 > Edit 强势 > : 这个代码的原理相同( 这是从 Dive 到 Python 的示例 ) 。 在此, 同样的事情也做了, 那么为什么没有错误?
def info(object, spacing=10, collapse=1):
"""Print methods and doc strings.
Takes module, class, list, dictionary, or string."""
methodList = [e for e in dir(object) if callable(getattr(object, e))]
processFunc = collapse and (lambda s: " ".join(s.split())) or (lambda s: s)
print "
".join(["%s %s" %
(method.ljust(spacing),
processFunc(str(getattr(object, method).__doc__)))
for method in methodList])