python错误:' str'对象没有属性' upper()'

时间:2015-10-29 09:57:12

标签: python python-3.x formatting attributeerror

我在Python 3中发现了使用.format()方法进行字符串格式化的可能性,但我提出了一个我不理解的错误。

那么,为什么下面的行是可以的[让我想到" 0"可以像传递给format()]的参数一样使用:

s = 'First letter of {0} is {0[0]}'.format("hello")  
#gives as expected: 'First letter of hello is h'

但不是这个[在{0}中将方法或函数应用于0并不起作用?]:

s = '{0} becomes {0.upper()} with .upper() method'.format("hello")

引发以下错误:

AttributeError: 'str' object has no attribute 'upper()'

为什么引发的错误表明我使用鞋帮作为属性而不是方法? 还有另一种方法可以做到:

s = '{} becomes {} with .upper() method'.format("hello","hello".upper())
#gives as expected: 'hello becomes HELLO with .upper() method'

谢谢!

1 个答案:

答案 0 :(得分:3)

字符串格式使用有限的类似Python的语法。它使用的是实际的Python表达式。此语法不支持调用,仅支持订阅(按编号或不带引号(!)名称编制索引),并支持属性访问。

请参阅Format String Syntax文档,该文档将字段命名部分限制为:

field_name        ::=  arg_name ("." attribute_name | "[" element_index "]")*

Python 3.6将添加一个支持完整表达式的新literal string format,因为在编译Python代码时,解释器会直接解析这些表达式。使用这样的文字你可以这样做:

value = 'hello'
s = f'{value} becomes {value.upper()} with .upper() method'