print ("Hello World")
print ("{} World").format(Hello)
我正在为我的第一个" Hello World"程序,我可以通过使用print函数和一个简单的字符串文本来使它工作,但当我尝试使用.format
时,它给了我错误:
AttributeError: 'NoneType' object has no attribute 'format'
这是说我需要初始化.format
的变量,还是我错过了什么?
答案 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}'
在两个版本中都可以正常工作...