web-dev-qa-db-fra.com

TypeError: type (s) d'opérande non pris en charge pour%: 'NoneType' et 'str'

Je suis donc TRÈS nouveau dans la programmation et j'ai commencé avec Python 3. J'ai commencé à lire "Learn Python the Hard Way". Maintenant, je suis arrivé à un point où j'avais ce code:

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

Je ne connais pas vraiment la différence entre %r, %s Et %d. L'erreur que j'obtiens est TypeError: unsupported operand type(s) for %: 'NoneType' and 'str' Aucune idée de ce qu'il faut faire et comment y remédier. Veuillez expliquer comment je peux réellement le faire fonctionner et pourquoi cela ne fonctionnera pas. De plus, quelle est la différence entre% r, d et s? Des liens utiles? Merci d'avance.

23
user3586591

Vous souhaitez appliquer % À la chaîne à la place:

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

Votre code l'applique à la valeur de retour de l'appel print(), qui renvoie None.

Alternativement, vous pouvez passer à l'aide de str.format() :

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

Vous appelez le % En dehors de la fonction print(). Cela essaie de voir si la fonction réelle print peut être imprimée en tant que %r, Et parce que print ne renvoie rien, elle essaie d'obtenir %r Pour la valeur None (d'où l'erreur NoneType). Changez-le en:

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

Le code suivant:

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

Déclenche l'erreur suivante:

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'

Changer le code pour les œuvres suivantes:

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

Sortie:

Hello World! Hello
13
A.J. Uppal