de-vraag
  • Pytania
  • Tagi
  • Użytkownicy
Powiadomienia
Nagrody
Rejestracja
Po zarejestrowaniu się, będziesz otrzymywać powiadomienia o odpowiedziach i komentarzach do swoich pytań.
Zaloguj się
Brak tłumaczeń pasujących do Twojego wyszukiwania Jeśli masz już konto, zaloguj się, aby sprawdzić nowe powiadomienia.
Za dodane pytania, odpowiedzi i komentarze przewidziane są nagrody.
Więcej
Źródło
Edytuj
 chillpenguin
chillpenguin
Question

input() error - NameError: name '...' is not defined

Otrzymuję błąd, gdy próbuję uruchomić ten prosty skrypt pythona:

input_variable = input ("Enter your name: ")
print ("your name is" + input_variable)

Powiedzmy, że wpisuję "dude", błąd, który dostaję to:

line 1, in <module>
input_variable = input ("Enter your name: ")
File "<string>", line 1, in <module>
NameError: name 'dude' is not defined

Pracuję na Mac OS X 10.9.1 i używam aplikacji Python Launcher, która została dołączona do instalacji Pythona 3.3, aby uruchomić skrypt.

Edycja: Zdałem sobie sprawę, że w jakiś sposób uruchamiam te skrypty z 2.7. Zgaduję, że prawdziwym pytaniem jest, jak mogę uruchomić moje skrypty z wersją 3.3? Myślałem, że jeśli przeciągnę i upuszczę moje skrypty na wierzch aplikacji Python Launcher, która jest wewnątrz folderu Python 3.3 w moim folderze aplikacji, że uruchomi moje skrypty przy użyciu 3.3. Domyślam się, że ta metoda nadal uruchamia skrypty z 2.7. Więc jak mogę używać 3.3?

192 2014-01-14T19:44:14+00:00 3
 pppery
pppery
Edytowane pytanie 22. października 2019 в 9:33
Programowanie
python
input
python-2.7
nameerror
Popular videos
How to fix object name not defined error in Jupyter Notebook
How to fix object name not defined error in Jupyter Notebook
2 lata temu
Python input error NameError: name is not defined
Python input error NameError: name is not defined
7 lat temu
PYTHON : input() error - NameError: name &#39;...&#39; is not defined
PYTHON : input() error - NameError: name '...' is not defined
5 miesięcy temu
NameError : name &#39;x&#39; is not defined Python NameError
NameError : name 'x' is not defined Python NameError
8 lat temu
How to fix Name Not Defined Error in Python
How to fix Name Not Defined Error in Python
1 rok temu
NameError: name &#39;requests&#39; is not defined
NameError: name 'requests' is not defined
11 miesięcy temu
Python 3 Course 06 Error name not defined
Python 3 Course 06 Error name not defined
4 lata temu
Name error in python.
Name error in python.
1 rok temu
python2 file input NameError name is not defined
python2 file input NameError name is not defined
1 rok temu
NameError: name &#39;urllib3&#39; is not defined
NameError: name 'urllib3' is not defined
11 miesięcy temu
#python #name not defined #error solved
#python #name not defined #error solved
1 rok temu
FIX &#39;&#39;Tk() is not defined error&#39;&#39;
FIX ''Tk() is not defined error''
2 lata temu
NameError: name &#39;np&#39; is not defined
NameError: name 'np' is not defined
1 rok temu
python tutorial: NameError: name &#39;encoding&#39; is not defined-Solved
python tutorial: NameError: name 'encoding' is not defined-Solved
6 miesięcy temu
NameError: name &#39;messagebox&#39; is not defined &quot;FIX&quot; | Python Tutorial | ProgrammerParker
NameError: name 'messagebox' is not defined "FIX" | Python Tutorial | ProgrammerParker
4 lata temu
« Poprzedni
Następny »
To pytanie ma 1 odpowiedź w języku angielskim, aby je przeczytać zaloguj się na swoje konto.
 thefourtheye
thefourtheye
14. stycznia 2014 в 8:00
2014-01-14T20:00:05+00:00
Więcej
Źródło
Edytuj
#23371024

TL;DR

Funkcja input w Pythonie 2.7, ocenia cokolwiek wpiszesz, jako wyrażenie Pythona. Jeśli chcesz po prostu czytać ciągi znaków, użyj funkcji raw_input w Pythonie 2.7, która nie będzie oceniać czytanych ciągów znaków.

Jeśli używasz Pythona 3.x, raw_input zostało przemianowane na input. Cytaty z Python 3.0 release notes,

raw_input() zostało przemianowane na input(). Oznacza to, że nowa funkcja input() czyta linię z sys.stdin i zwraca ją z usuniętą końcową nową linią. Podnosi ona EOFError jeśli wejście jest zakończone przedwcześnie. Aby uzyskać stare zachowanie input(), użyj eval(input()).


W Pythonie 2.7, istnieją dwie funkcje, które mogą być użyte do akceptowania danych wejściowych użytkownika. Jedna z nich to input, a druga to raw_input. Możesz pomyśleć o relacji między nimi w następujący sposób

input = eval(raw_input)

Rozważmy następujący fragment kodu, aby lepiej to zrozumieć

>>> dude = "thefourtheye"
>>> input_variable = input("Enter your name: ")
Enter your name: dude
>>> input_variable
'thefourtheye'

input przyjmuje ciąg znaków od użytkownika i analizuje go w bieżącym kontekście Pythona. Kiedy wpiszę dude jako wejście, okaże się, że dude jest związany z wartością thefourtheye i tak wynik oceny staje się thefourtheye i to zostaje przypisane do input_variable.

Jeśli wpiszę coś innego, czego nie ma w bieżącym kontekście pythona, zakończy się to niepowodzeniem z NameError.

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

Uwagi dotyczące bezpieczeństwa z Pythonem 2.7's input:

Ponieważ cokolwiek wpisuje użytkownik jest analizowane, nakłada to również problemy bezpieczeństwa. Na przykład, jeśli już załadowałeś moduł os do swojego programu za pomocą import os, a następnie użytkownik wpisuje

os.remove("/etc/hosts")

zostanie to ocenione przez pythona jako wyrażenie wywołania funkcji i zostanie wykonane. Jeśli wykonujesz Pythona z podwyższonymi uprawnieniami, plik /etc/hosts zostanie usunięty. Widzisz, jakie to może być niebezpieczne?

Aby to zademonstrować, spróbujmy ponownie wykonać funkcję input.

>>> dude = "thefourtheye"
>>> input("Enter your name: ")
Enter your name: input("Enter your name again: ")
Enter your name again: dude

Teraz, gdy funkcja input("Podaj swoje imię: ") jest wykonywana, czeka ona na dane wejściowe użytkownika, a dane wejściowe użytkownika są poprawnym wywołaniem funkcji Pythona, a więc są również wywoływane. Dlatego właśnie widzimy ponownie Enter your name again: prompt again.

Tak więc, lepiej jest użyć funkcji raw_input, jak poniżej

input_variable = raw_input("Enter your name: ")

Jeśli potrzebujesz przekonwertować wynik na jakiś inny typ, wtedy możesz użyć odpowiednich funkcji do konwersji łańcucha zwracanego przez raw_input. Na przykład, aby odczytać dane wejściowe jako liczby całkowite, użyj funkcji int, jak pokazano w this answer.

W pythonie 3.x jest tylko jedna funkcja do pobierania danych wejściowych od użytkownika i nazywa się ona input, co jest odpowiednikiem Pythona 2.7' raw_input.

 Community
Community
Edytowana odpowiedź 23. maja 2017 в 12:03
252
0
Anonimowy użytkownik
14. stycznia 2014 в 7:53
2014-01-14T19:53:13+00:00
Więcej
Źródło
Edytuj
#23371023

Używasz Pythona 2, nie Pythona 3. Aby to działało w Pythonie 2, użyj raw_input.

input_variable = raw_input ("Enter your name: ")
print ("your name is" + input_variable)
 davidism
davidism
Edytowana odpowiedź 6. marca 2016 в 9:03
51
0
 Zim
Zim
9. sierpnia 2016 в 12:09
2016-08-09T00:09:32+00:00
Więcej
Źródło
Edytuj
#23371025

Ponieważ piszesz dla Pythona 3.x, będziesz chciał rozpocząć swój skrypt od:

#!/usr/bin/env python3

Jeśli używasz:

#!/usr/bin/env python

Domyślnie będzie to Python 2.x. Są one umieszczane w pierwszej linii skryptu, jeśli nie ma nic, co zaczyna się od #! (aka shebang).

Jeśli twoje skrypty zaczynają się tylko od:

#! python

Wtedy możesz zmienić to na:

#! python3

Chociaż to krótsze formatowanie jest rozpoznawane tylko przez kilka programów, takich jak launcher, więc nie jest to najlepszy wybór.

Dwa pierwsze przykłady są znacznie powszechniej używane i pomogą zapewnić, że Twój kod będzie działał na każdej maszynie z zainstalowanym Pythonem.

15
0
Dodaj pytanie
Kategorie
Wszystkie
Technologia
Kultura / Rekreacja
Życie / Sztuka
Nauka
Profesjonalny
Biznes
Użytkownicy
Wszystkie
Nowy
Popularny
1
Jasur Fozilov
Zarejestrowany 9 godzin temu
2
Zuxriddin Muydinov
Zarejestrowany 1 dzień temu
3
Денис Анненский
Zarejestrowany 3 dni temu
4
365
Zarejestrowany 1 tydzień temu
5
True Image
Zarejestrowany 1 tydzień temu
DA
DE
EL
ES
FR
ID
IT
JA
KO
NL
PL
PT
RU
TR
ZH
© de-vraag 2022
Źródło
stackoverflow.com
na podstawie licencji cc by-sa 3.0 z przypisaniem