Pregunta TypeError: tipo (s) de operandos no soportados para%: 'NoneType' y 'str'


Así que soy MUY nuevo en la programación y comencé con Python 3. Comencé a leer "Aprende Python al estilo difícil". Ahora, llegué a un punto donde tenía este código:

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

Realmente no sé la diferencia entre %r, %s y %d. El error que obtengo es TypeError: unsupported operand type(s) for %: 'NoneType' and 'str' No tengo idea de qué hacer y cómo solucionarlo. Explique cómo puedo hacer que funcione y por qué no funcionará. Además, ¿cuál es la diferencia entre% r, d y s? ¿Algún enlace útil? Gracias de antemano.


16
2018-04-29 18:45


origen


Respuestas:


Quieres aplicar % al cuerda en lugar:

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

Su código lo está aplicando al valor de retorno de la print() llamada, que devuelve None.

Alternativamente, puede cambiar a usar str.format():

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

13
2018-04-29 18:46



Usted está llamando al % fuera de la print() función. Esto trata de ver si la función real print se puede imprimir como %r, y porqué print no devuelve nada, intenta obtener %r por el valor None (por lo tanto, la NoneType error). Cambiarlo a:

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

El siguiente código:

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

Genera el siguiente error:

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'

Cambiar el código a los siguientes trabajos:

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

Salida:

Hello World! Hello

8
2018-04-29 18:48