python - TypeError: tipo(s) de operando no soportados para%: ''NoneType'' y ''str''
string-formatting (2)
Así que soy MUY nuevo en programación y empecé con Python 3. Comencé a leer "Aprende Python de la manera 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
%d
. El error que recibo es TypeError: unsupported operand type(s) for %: ''NoneType'' and ''str''
No tengo idea de qué hacer y cómo solucionarlo. Por favor, 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.
Desea aplicar %
a la cadena en su lugar:
print("I said: %r" % x)
Su código lo está aplicando al valor de retorno de la llamada a print()
, que devuelve None
.
Alternativamente, puedes cambiar a usar str.format()
:
print("I said: {!r}".format(x))
Está llamando al %
fuera de la función print()
. Esto intenta ver si la función de print
real puede imprimirse como %r
, y debido a que la print
no devuelve nada, intenta obtener %r
para el valor None
(de ahí el error NoneType
). Cambiarlo a:
print("I said: %r" %(x))
El siguiente código:
#!/usr/local/bin/python3
x = "Hello"
print ("Hello World! %s") %(x)
Plantea 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''
Cambiando el código a los siguientes trabajos:
#!/usr/local/bin/python3
x = "Hello"
print ("Hello World! %s" %(x))
Salida:
Hello World! Hello