Python:'{0.lower()}'。format('A')产生'str'对象没有属性'lower()'

时间:2019-03-31 15:36:58

标签: python attributeerror

在Python中,字符串具有方法lower()

>>> dir('A')
[... 'ljust', 'lower', 'lstrip', ...]

但是,当尝试'{0.lower()}'.format('A')时,响应指出:

>>> '{0.lower()}'.format('A')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute 'lower()'

有人可以帮助我理解为什么在这种情况下,上面的行会引发AttributeError吗?似乎它不应该是AttributeError,尽管我一定会误会。任何了解这一点的帮助将非常欢迎!

编辑:我知道我不能在format调用内调用lower()方法(尽管如果可能的话,它会很整洁)。我的问题是为什么这样做会引发AttributeError。在这种情况下,此错误似乎会引起误解。

2 个答案:

答案 0 :(得分:8)

您不能从格式规范内调用方法。格式说明符中的点表示法是一种查找属性名称并呈现其值的方法,而不是调用函数的方法。

0.lower()尝试在字符串 literally 上查找名为“ lower()”的属性。您需要在格式化之前调用该方法。

>>> '{0.lower()}'.format('A')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute 'lower()'
>>> '{0}'.format('A'.lower())
'a'

答案 1 :(得分:3)

正如其他人所说,您不能在格式表达式中执行此操作。它将在f字符串中起作用:

a = "A"
print(f"{a.lower()}")