Python错误:AttributeError:'str'对象没有属性'k'

Vic*_*cky 2 python python-3.x

s="ABC"

for k in ["isalnum()", "isalpha()", "isdigit()", "islower()", "isupper()"]:
    for c in s:
        print(c.k)
Run Code Online (Sandbox Code Playgroud)

获取此错误"AttributeError:'str'对象在执行上述代码时没有属性'k'".我提到了有关此错误的其他类似问题,但无法解决我的问题,我对python很新.

Dan*_*man 7

列表中的元素只是字符串.即使它们不是,c.k也总是要引用文字属性k,而不是与列表中的属性相对应的属性.

你需要用getattr; 但括号不是属性名称的一部分,您需要将它们关闭.

for k in ["isalnum", "isalpha", "isdigit", "islower", "isupper"]:
    for c in s:
        print(getattr(c, k)())
Run Code Online (Sandbox Code Playgroud)


tim*_*geb 5

您可能想要调用您在字符上列出的方法s.

一种可能性是使用getattr以按字符串名称查找对象的属性:

>>> s = "ABC"
>>> for k in ["isalnum", "isalpha", "isdigit", "islower", "isupper"]:
...     for c in s:
...         getattr(c, k)() # get the attribute, then call it
... 
True
True
True
True
True
True
False
False
False
False
False
False
True
True
True
Run Code Online (Sandbox Code Playgroud)

或者,您可以str直接遍历类的方法:

>>> s = "ABC"
>>> for k in [str.isalnum, str.isalpha, str.isdigit, str.islower, str.isupper]:
...     for c in s:
...         k(c)
... 
True
True
True
True
True
True
False
False
False
False
False
False
True
True
True
Run Code Online (Sandbox Code Playgroud)

(我使用了您所做的变量名称,但我建议至少重命名kmethod.)