Heim >Backend-Entwicklung >Python-Tutorial >Warum wirft meine Python-Eingabefunktion einen „NameError: Name ‚...' ist nicht definiert' aus?
Eingabefunktionsfehler beheben: „NameError: name '...“ Nicht definiert
Die Eingabefunktion in Python, insbesondere in Versionen vor 3.x stellt eine besondere Herausforderung beim Umgang mit Benutzereingaben dar. Der Fehler „NameError: Name '...'' ist nicht definiert“ rührt von der Bewertungsnatur der Eingabe her.
In Python 2.7 akzeptiert die Eingabe nicht nur Benutzereingaben, sondern wertet diese auch als aus Python-Ausdruck. Das heißt, wenn Sie einen Variablennamen wie „dude“ eingeben, wird Input versuchen, ihn als gebundene Variable in Ihrem Programm zu interpretieren. Wenn keine solche Variable vorhanden ist, tritt der Fehler auf.
Die Fallstricke der Eingabe von Python 2.7 vermeiden
Um dieses potenzielle Sicherheitsrisiko zu vermeiden, sollten Sie einen Wechsel zu raw_input in Betracht ziehen. der Vorgänger der Eingabe in Python 3.x. raw_input liest einfach Benutzereingaben, ohne sie auszuführen.
In Python 3.x ersetzt input effektiv raw_input und bietet die gleiche Funktionalität. In der Python 3.x-Dokumentation wird jedoch darauf hingewiesen, dass Sie eval(input()) verwenden können, wenn Sie das alte Eingabeverhalten benötigen.
Die Unterscheidung verstehen
Zu Um den Unterschied zwischen Eingabe und Raw_Input zu veranschaulichen, betrachten wir den folgenden Python 2.7-Code:
dude = "thefourtheye" input_variable = input("Enter your name: ")
Wenn Sie eingeben „dude“ als Eingabe, input_variable wird der Wert „thefourtheye“ zugewiesen, da dude eine definierte Variable im Programm ist.
Vergleichen Sie dies mit dem folgenden Code:
input_variable = raw_input("Enter your name: ")
In diesem Fall , input_variable wird die Zeichenfolge „dude“ selbst zugewiesen, ohne dass eine Auswertung erfolgt.
Sicherheit Überlegungen
Die Auswertungsfähigkeit von Eingaben in Python 2.7 wirft Sicherheitsbedenken auf. Wenn beispielsweise das Betriebssystemmodul importiert wurde und der Benutzer „os.remove('/etc/hosts')“ eingibt, wird es als Funktionsaufruf ausgeführt. Um diese Risiken zu mindern, sollten Sie immer die Verwendung von raw_input in Betracht ziehen, um sicherzustellen, dass Benutzereingaben nicht versehentlich als Code ausgewertet werden.
Das obige ist der detaillierte Inhalt vonWarum wirft meine Python-Eingabefunktion einen „NameError: Name ‚...' ist nicht definiert' aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!