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

use*_*591 24 python string-formatting typeerror

所以我对编程非常陌生,我从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
Run Code Online (Sandbox Code Playgroud)

我真的不知道之间的区别%r,%s%d.我得到的错误是TypeError: unsupported operand type(s) for %: 'NoneType' and 'str'不知道该怎么做以及如何解决它.请解释我如何才能真正使它工作以及为什么它不起作用.另外,%r,d和s之间有什么区别?任何有用的链接?先感谢您.

Mar*_*ers 17

要应用%的字符串,而不是:

print("I said: %r" % x)
Run Code Online (Sandbox Code Playgroud)

您的代码将其应用于返回的print()调用的返回值None.

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

print("I said: {!r}".format(x))
Run Code Online (Sandbox Code Playgroud)


A.J*_*pal 14

你正在调用函数的%外部print().这试图查看实际函数是否print可以打印为%r,并且由于print不返回任何内容,它会尝试获取%rNone(因此NoneType错误).将其更改为:

print("I said: %r" %(x))
Run Code Online (Sandbox Code Playgroud)

以下代码:

#!/usr/local/bin/python3
x = "Hello"
print ("Hello World! %s") %(x)
Run Code Online (Sandbox Code Playgroud)

引发以下错误:

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'
Run Code Online (Sandbox Code Playgroud)

将代码更改为以下作品:

#!/usr/local/bin/python3
x = "Hello"
print ("Hello World! %s" %(x))
Run Code Online (Sandbox Code Playgroud)

输出:

Hello World! Hello
Run Code Online (Sandbox Code Playgroud)