Saya mendapatkan error ketika saya mencoba untuk menjalankan ini simple python script:
input_variable = input ("Enter your name: ")
print ("your name is" + input_variable)
Katakanlah saya ketik "dude", kesalahan saya mendapatkan ini:
line 1, in <module>
input_variable = input ("Enter your name: ")
File "<string>", line 1, in <module>
NameError: name 'dude' is not defined
Saya menjalankan Mac OS X 10.9.1, dan saya menggunakan Python aplikasi Launcher yang datang dengan menginstal python 3.3 untuk menjalankan script.
Edit: saya menyadari bahwa saya entah bagaimana menjalankan script ini dengan 2.7. Saya kira pertanyaan sebenarnya adalah bagaimana cara menjalankan script saya dengan versi 3.3? Aku pikir jika aku menyeret dan menjatuhkan script saya di atas Python aplikasi Launcher yang ada di dalam Python 3.3 folder dalam folder aplikasi saya bahwa itu akan meluncurkan script saya menggunakan 3.3. Saya kira metode ini masih meluncurkan script dengan 2.7. Jadi Bagaimana cara menggunakan 3.3?
TL;DR
input
function di Python 2.7, mengevaluasi apa pun yang anda masukkan, seperti Python ekspresi. Jika anda hanya ingin membaca string, maka menggunakan raw_input
function di Python 2.7, yang tidak akan mengevaluasi baca string.
Jika anda menggunakan Python 3.x, raw_input
telah berganti nama menjadi input
. Mengutip Python 3.0 rilis catatan,
raw_input()
berganti nama menjadiinput()
. Artinya, baruinput()
fungsi membaca baris darisys.stdin
dan kembali dengan baris baru mengikuti dilucuti. Hal itu menimbulkanEOFError
jika input dihentikan sebelum waktunya. Untuk mendapatkan perilaku lamainput()
, gunakaneval(input())
Di Python 2.7, ada dua fungsi yang dapat digunakan untuk menerima input pengguna. Salah satunya adalah input
dan raw_input
. Anda dapat berpikir tentang hubungan antara mereka sebagai berikut
input = eval(raw_input)
Perhatikan potongan kode berikut untuk memahami hal ini lebih baik
>>> dude = "thefourtheye"
>>> input_variable = input("Enter your name: ")
Enter your name: dude
>>> input_variable
'thefourtheye'
input
menerima string dari pengguna dan mengevaluasi string di Python saat ini konteks. Ketika saya ketik dude
sebagai input, ia menemukan bahwa dude
terikat untuk nilai thefourtheye
dan hasil evaluasi ini menjadi thefourtheye
dan yang akan ditugaskan untuk input_variable
.
Jika saya memasukkan sesuatu yang lain yang tidak ada di saat ini python konteks, itu akan gagal akan 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
Pertimbangan keamanan dengan Python 2.7's input
:
Karena apapun jenis pengguna dievaluasi, itu membebankan masalah keamanan juga. Misalnya, jika anda telah dimuat os
modul dalam program anda dengan impor os
, dan kemudian jenis pengguna dalam
os.remove("/etc/hosts")
ini akan dievaluasi sebagai fungsi panggilan ekspresi dengan python dan itu akan dieksekusi. Jika anda menjalankan Python dengan hak tinggi, /etc/hosts
file yang akan dihapus. Lihat, bagaimana berbahaya itu bisa?
Untuk menunjukkan hal ini, let's mencoba untuk mengeksekusi input
fungsi lagi.
>>> dude = "thefourtheye"
>>> input("Enter your name: ")
Enter your name: input("Enter your name again: ")
Enter your name again: dude
Sekarang, ketika input("Masukkan nama anda: ")
dieksekusi, menunggu input pengguna dan input pengguna yang valid Python fungsi doa dan sebagainya yang juga dipanggil. Itulah sebabnya kita melihat Masukkan nama anda lagi:
prompt lagi.
Jadi, anda lebih baik dengan raw_input
fungsi, seperti ini
input_variable = raw_input("Enter your name: ")
Jika anda perlu mengkonversi hasilnya ke beberapa jenis lain, maka anda dapat menggunakan fungsi yang tepat untuk mengkonversi string yang dikembalikan oleh raw_input
. Misalnya, untuk membaca input sebagai bilangan bulat, gunakan int
fungsi, seperti yang ditunjukkan dalam jawaban.
Di python 3.x, hanya ada satu fungsi untuk mendapatkan input pengguna dan yang disebut input
, yang setara dengan Python 2.7's raw_input
.
Karena anda menulis untuk Python 3.x, anda'll ingin memulai dengan script:
#!/usr/bin/env python3
Jika anda menggunakan:
#!/usr/bin/env python
Itu akan default untuk Python versi 2.x. Ini pergi pada baris pertama dari naskah anda, jika ada apa-apa yang dimulai dengan #! (alias shebang).
Jika script anda hanya mulai dengan:
#! python
Kemudian anda dapat mengubahnya ke:
#! python3
Meskipun ini lebih pendek format hanya diakui oleh beberapa program, seperti peluncur, jadi itu bukan pilihan terbaik.
Dua contoh pertama adalah jauh lebih banyak digunakan dan akan membantu memastikan kode anda akan bekerja pada setiap mesin yang telah diinstal Python.
Anda harus menggunakan raw_input
karena anda menggunakan python 2.7. Ketika anda menggunakan input()
pada sebuah variabel (misalnya: s = input('Nama: ')
), itu akan mengeksekusi perintah PADA lingkungan Python tanpa menyimpan apa yang anda tulis pada variabel (s
) dan membuat kesalahan jika apa yang anda tulis tidak didefinisikan.
raw_input()
akan menyimpan dengan benar apa yang anda tulis pada variabel (misalnya: f = raw_input('Nama : ')
), dan itu tidak akan melaksanakannya di lingkungan Python tanpa membuat kesalahan mungkin:
input_variable = raw_input('Enter Your Name : ')
print("Your Name Is : " + (input_variable))
Untuk python 3 dan di atas
s = raw_input()
ini akan memecahkan masalah pada pycharm IDE jika anda adalah pemecahan pada situs online persis hackerrank kemudian gunakan:
s = input()
Anda bisa melakukan:
x = raw_input("enter your name")
print "your name is %s " % x
atau:
x = str(input("enter your name"))
print "your name is %s" % x
input_variable = input ("Enter your name: ")
print ("your name is" + input_variable)
Anda harus memasukkan input dalam tanda kutip tunggal atau ganda
Ex:'dude' -> correct
dude -> not correct
Untuk orang lain yang mungkin mengalami masalah ini, ternyata bahwa bahkan jika anda termasuk #!/usr/bin/env python3
di awal script, shebang diabaikan jika file isn't executable.
Untuk menentukan apakah atau tidak anda file executable:
./filename.py
dari baris perintah-bash: ./filename.py: Permission denied
, berlari chmod+x filename.py
./filename.py
lagiJika anda've termasuk import sys; print(sys.versi)
sebagai Kevin menyarankan, anda'll sekarang melihat bahwa script ini ditafsirkan oleh python3
Baik kontribusi yang sebelumnya.
import sys; print(sys.version)
def ingreso(nombre):
print('Hi ', nombre, type(nombre))
def bienvenida(nombre):
print("Hi "+nombre+", bye ")
nombre = raw_input("Enter your name: ")
ingreso(nombre)
bienvenida(nombre)
#Works in Python 2 and 3:
try: input = raw_input
except NameError: pass
print(input("Your name: "))
Masukkan nama anda: Joe ('Hi ', 'Joe', <type 'str'>) Hi Joe, byeTerima kasih!!!Nama: Joe Joe
Saya juga mengalami masalah ini dengan modul yang seharusnya kompatibel untuk python 2.7 dan 3.7
apa yang saya temukan untuk memperbaiki masalah ini mengimpor:
from six.moves import input
ini tetap kegunaan untuk investasi interpreter
anda dapat membaca lebih lanjut tentang enam perpustakaan di sini
Anda dapat mengubah python anda're menggunakan dengan IDE anda, jika anda've sudah download python 3.x seharusnya't akan terlalu sulit untuk beralih. Tapi script anda bekerja dengan baik pada python 3.x, saya hanya akan mengubah
print ("your name is" + input_variable)
untuk
print ("your name is", input_variable)
Karena dengan koma mencetak dengan spasi di antara nama anda
dan apapun yang diinput user. DAN jika anda're menggunakan 2.7 hanya menggunakan raw_input
bukan masukan.