TypeError: 不支持的操作数类型:%:'NoneType'和'str'。

29

我是一名新手程序员,刚开始学习Python 3。我阅读了《笨办法学Python》这本书,目前我遇到了以下代码:

x = "There are %d types of people." % 10
binary = "binary"
do_not = "don't"
y = "Those who know %s and those who %s" % (binary, do_not)

print(x)
print(y)
print("I said: %r") % x

我不太了解%r%s%d之间的区别。我收到的错误是TypeError: unsupported operand type(s) for %: 'NoneType' and 'str'。我不知道该怎么做和如何修复它。请解释一下如何使其正常工作以及为什么它不能工作。另外,%r、%d和%s有什么区别?有没有有用的链接?非常感谢。

13
为什么要踩?这是一个新用户,让我们不要在没有解释的情况下赶走他/她。 - Mark Giaconia
@markg 我猜是因为这个问题非常差,而且很容易找到这种事情的答案。 - juanchopanza
@markg 因为错误明确告诉了 OP 问题所在? - jonrsharpe
1
@jonrsharpe 如果你懂Python的话,它是可以实现的。但对于初学者来说,阅读起来可能不太容易(但如果他们花足够的时间去琢磨,也许还是能做到的)。 - Davidmh
6
这让我想起了我第一次加入这个平台的时候,一个由12人组成的团队会来查看我的问题,并标记为没有建设性、不是这个不是那个,然后就走了。没有方向,没有帮助,也没有解释。所以我就不再提问了。 - Ajayi Oluwaseun Emmanuel
显示剩余4条评论
2个回答

21
你希望将 % 应用在 字符串 上,而不是其他地方。
print("I said: %r" % x)

你的代码将它应用于print()调用的返回值上,该调用返回None

或者,你可以切换到使用str.format()

print("I said: {!r}".format(x))

18
你正在调用print()函数之外的%。这会尝试将实际函数print打印为%r,由于print没有返回任何内容,因此它尝试获取值None%r(因此出现了NoneType错误)。请将其更改为:print()函数内部的%
print("I said: %r" %(x))

以下是代码:

#!/usr/local/bin/python3
x = "Hello"
print ("Hello World! %s") %(x)

引发以下错误:

Hello World! %s
Traceback (most recent call last):
  File "main.py", line 3, in 
    print ("Hello World! %s") %(x)
TypeError: unsupported operand type(s) for %: 'NoneType' and 'str'

将代码更改为以下内容即可正常工作:

#!/usr/local/bin/python3
x = "Hello"
print ("Hello World! %s" %(x))

输出:

Hello World! Hello

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接