TypeError: неподдерживаемый тип (-ы) операндов для%: 'NoneType' и 'str'

Итак, я ОЧЕНЬ новичок в программировании, и я начал с Python 3. Я начал читать "Learn Python the Hard Way". Теперь я дошел до того, что у меня был этот код:

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? Любые полезные ссылки? Заранее благодарю вас.

Ответ 1

Вместо этого вы хотите применить % к строке:

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

Ваш код применяет его к возвращаемому значению вызова print(), который возвращает None.

В качестве альтернативы вы можете переключиться на str.format():

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

Ответ 2

Вы вызываете % вне функции print(). Это пытается увидеть, можно ли напечатать фактическую функцию print как %r, а поскольку print ничего не возвращает, она пытается получить %r для значения None (следовательно, ошибка NoneType). Измените его на:

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