2010-04-10 21 views
9

Sto imparando Python e ho questo errore. Posso capire dove \ l'errore è nel codice. File "<string>", line 1, in <module>.in python d non definito.

Name = "" 
Desc = "" 
Gender = "" 
Race = "" 
# Prompt user for user-defined information 
Name = input('What is your Name? ') 
Desc = input('Describe yourself: ') 

quando ho eseguito il programma

emette Qual è il tuo nome? (D ingresso i)

questo dà l'errore

Traceback (most recent call last): 
    File "/python/chargen.py", line 19, in <module> 
    Name = input('What is your Name? ') 
    File "<string>", line 1, in <module> 
NameError: name 'd' is not defined 

Questo è un esempio di codice da Python 3 per principianti assoluti.

risposta

17

In Python 2.x, input() aspetta qualcosa che è un'espressione Python, il che significa che se si digita d esso interpreta che come variabile denominata d. Se hai digitato "d", allora andrebbe bene.

Quello che probabilmente si desidera per 2.x è raw_input(), che restituisce il valore immesso come stringa non elaborata invece di valutarlo.

Dal momento che si sta verificando questo comportamento, sembra che si stia utilizzando una versione 2.x dell'interprete Python - invece, andrei a www.python.org e scaricherò un interprete Python 3.x in modo che corrisponda con il libro che stai usando.

1

In Python 3.0 e versioni successive, che il libro in uso insegna, input() fa ciò che faceva raw_input() in Python 2, quindi in tal caso il codice sarebbe corretto; tuttavia, sembra che stai usando una versione precedente di Python (2.6?).

Vorrei raccomandare di andare allo Python website e scaricare l'ultima versione di Python 3 invece, in modo da avere un tempo più semplice per seguire il libro.


Il problema immediato, dato che si sta utilizzando Python 2, è che si sta utilizzando input(), che valuta tutto ciò che si dà. Che cosa si vuole fare è ottenere la stringa grezza che l'input dell'utente:

Name = raw_input("What is your Name? ") 

Ci sono un sacco di piccole differenze tra Python 3.xe 2.x, quindi sicuramente andare a prendere l'ultima Python 3, se si desidera continua a usare Python 3 per Absolute Beginners.

3

Probabilmente stai usando Python 2.x, dove input sarà eval l'input dell'utente. Solo in Python 3.x input() restituisce l'input dell'utente non elaborato.

È possibile controllare la versione di Python eseguendo python in console, ad es. questo è Python 2.6:

~$ python 
Python 2.6.5 (r265:79063, Apr 5 2010, 00:18:33) 
[GCC 4.2.1 (Apple Inc. build 5659)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> 

È possibile eseguire una specifica versione di Python (ad esempio 3,1) per python3.1:

~$ python3.1 
Python 3.1.1 (r311:74480, Jan 25 2010, 15:23:53) 
[GCC 4.2.1 (Apple Inc. build 5646) (dot 1)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> 
+0

Hi kennyTM Thanks a lot! sembro un conflitto di versione :( Python 2.6.4 (r264: 75706, 7 dicembre 2009, 18:45:15) [GCC 4.4.1] su linux2 aggiornerà la mia versione python. Non l'avrei mai capito senza di voi ragazzi grazie ancora :) – dtechie