AttributeError:' NoneType'对象没有属性'格式'

时间:2015-02-07 03:33:49

标签: python string python-3.x

print ("Hello World")
print ("{} World").format(Hello)

我正在为我的第一个" Hello World"程序,我可以通过使用print函数和一个简单的字符串文本来使它工作,但当我尝试使用.format时,它给了我错误:

AttributeError: 'NoneType' object has no attribute 'format' 

这是说我需要初始化.format的变量,还是我错过了什么?

3 个答案:

答案 0 :(得分:30)

您的括号错误

print("Hello World")
print("{} World".format('Hello')) 

注意 - 错误

  • format函数是str的属性,因此需要在字符串上调用
  • 除非声明,Hello是一个字符串,应该是'Hello'

对于Py2,你可以做到

print "{} World".format('Hello') 

答案 1 :(得分:1)

函数print返回None,这显然是你从第二个语句的开头得到的,即

print ("{} World")

None的返回值上,您可以调用.format(Hello) - 即使在您的代码中某处指定了名为Hello的变量(并且您没有向我们展示它) !),您在.format来自None来电的print上拨打了.format方法,这没有任何意义。

相反,你想在字符串 "{} World"上调用) - 所以在字符串之后和点之前的封闭式显然是一个可怕的错误!将format移至语句末尾,移动对该字符串调用Hello

此外, 'Hello'要格式化其值的变量的名称?我当然希望不会,否则为什么你没有告诉我们变量被分配?!我怀疑你想格式化一个常量字符串而只是心不在焉地忘记把它放在引号(显示它是一个常量,而不是一个变量的名字!) - - Hello .format没有引号! 是你应该传递给{{1}}电话的正确形式......!

答案 2 :(得分:0)

甚至认为原始问题的请求者在使用.format结构时是错误的-我相信他对一件事仍然是正确的-当值等于None时,Python3中的行为是不同的< / p>

示例

fmt = '{:^9}|{:^13}|{:^18}'
data = [1, None, 'test']

print(fmt.format(*data))

Python2.7

$ python2.7 test
    1    |    None     |       test

在Python3.6中

python3.6 test
Traceback (most recent call last):
  File "test", line 5, in <module>
    print(fmt.format(*data))
TypeError: unsupported format string passed to NoneType.__format__

但是,如果我们删除了format的列宽功能

fmt = '{}|{}|{}'
data = [1, None, 'test']

print(fmt.format(*data))

或使用!s将所有值转换为字符串

fmt = '{!s:^9}|{!s:^13}|{!s:^18}'

在两个版本中都可以正常工作...