Python Traceback (meest recente oproep als laatste)

Ik krijg een foutmelding bij het uitvoeren van deze code:

nameUser=input("What is your name ? ")    
print (nameUser)

De foutmelding is

Traceback (meest recente oproep als laatste):
Bestand “C:/Users/DALY/Desktop/premier.py”, regel 1, in
Bestand “”, regel 1, in
NameError: naam ‘klj’ is niet gedefinieerd

Wat is er aan de hand?


Antwoord 1, autoriteit 100%

U gebruikt Python 2 waarvoor de input()functie probeert de ingevoerde uitdrukking te evalueren. Omdat u een tekenreeks invoert, behandelt Python deze als een naam en probeert deze te evalueren. Als er geen variabele is gedefinieerd met die naam, krijgt u een uitzondering NameError.

Om het probleem op te lossen, kun je in Python 2 gebruiken raw_input(). Dit retourneert de tekenreeksdie door de gebruiker is ingevoerd en probeert deze niet te evalueren.

Merk op dat als je Python 3 gebruikte, input()zich hetzelfde gedraagt als raw_input()in Python 2.


Antwoord 2, autoriteit 75%

In Python2 wordt inputgeëvalueerd, input()is gelijk aan eval(raw_input()). Wanneer je klj invoert, probeert Python die naam te evalueren en geeft een foutmelding omdat die naam niet is gedefinieerd.

Gebruik raw_inputom een string van de gebruiker in Python2 te krijgen.

Demo 1: kljis niet gedefinieerd:

>>> input()
klj
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<string>", line 1, in <module>
NameError: name 'klj' is not defined

Demo 2: kljis gedefinieerd:

>>> klj = 'hi'
>>> input()
klj
'hi'

Demo 3: een string krijgen met raw_input:

>>> raw_input()
klj
'klj'

Other episodes