2014-04-29 13 views
12

Quindi sono MOLTO nuovo alla programmazione e ho iniziato con Python 3. Ho iniziato a leggere "Learn Python the Hard Way". Ora, ho avuto modo di un punto in cui ho avuto questo codice:TypeError: Tipo/i di operando non supportati per%: 'NoneType' e 'str'

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 

io non so davvero la differenza tra %r, %s e %d. L'errore che ottengo è TypeError: unsupported operand type(s) for %: 'NoneType' and 'str' Non ho idea di cosa fare e come risolverlo. Per favore spiega come posso farlo funzionare e perché non funzionerà. Inoltre, qual è la differenza tra% r, d e s? Qualche link utile? Grazie in anticipo.

+2

perché il downvote? questo è un nuovo utente, non lo cacciamo via senza una spiegazione. – markg

+0

@markg Immagino perché la domanda è molto scarsa ed è banale trovare questo genere di cose. – juanchopanza

+0

@markg perché l'errore dice all'OP precisamente qual è il problema? – jonrsharpe

risposta

10

si desidera applicare % alla stringa invece :

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

Il codice sta applicando al valore di ritorno della print() chiamata, che restituisce None.

In alternativa, è possibile passare ad usare str.format():

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

Si sta chiamando il % al di fuori della funzione print(). Ciò prova a vedere se la funzione effettiva print può essere stampata come %r e poiché print non restituisce nulla, prova a ottenere %r per il valore None (da cui l'errore NoneType). Cambiarlo in:

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

Il seguente codice:

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

Aumenta il seguente errore:

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' 

Cambiare il codice per le seguenti opere:

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

uscita :

Hello World! Hello 
Problemi correlati