Saya mendapatkan kesalahan saat mencoba menjalankan skrip sederhana ini:
input_variable = input ("Enter your name: ")
print ("your name is" + input_variable)
Katakanlah saya mengetik "Bung", kesalahan yang saya dapatkan adalah:
line 1, in <module>
input_variable = input ("Enter your name: ")
File "<string>", line 1, in <module>
NameError: name 'dude' is not defined
Saya menjalankan skrip ini dengan Python 2.7.
python
python-2.7
input
nameerror
chillpenguin
sumber
sumber
input
untuk berperilaku seperti ini, tetapi hanya di 2.7. Apa isinya saat Anda menjalankanpython --version
dari command prompt? Atau, bagaimana jika Anda menulisimport sys; print(sys.version)
di awal skrip Anda?import sys
dan sebagai baris keduaprint(sys.version_info)
untuk memastikan versi yang Anda gunakan.Jawaban:
TL; DR
input
berfungsi dalam Python 2.7, mengevaluasi apa pun yang Anda masukkan, sebagai ekspresi Python. Jika Anda hanya ingin membaca string, gunakanraw_input
fungsi dalam Python 2.7, yang tidak akan mengevaluasi string baca.Jika Anda menggunakan Python 3.x,
raw_input
telah diubah namanya menjadiinput
. Mengutip catatan rilis Python 3.0 ,Dalam Python 2.7 , ada dua fungsi yang dapat digunakan untuk menerima input pengguna. Yang satu
input
dan yang lainnyaraw_input
. Anda bisa memikirkan hubungan di antara mereka sebagai berikutPertimbangkan potongan kode berikut untuk memahami ini dengan lebih baik
input
menerima string dari pengguna dan mengevaluasi string dalam konteks Python saat ini. Ketika saya mengetikdude
sebagai input, ia menemukan bahwadude
terikat dengan nilaithefourtheye
dan hasil evaluasi menjadithefourtheye
dan yang ditugaskaninput_variable
.Jika saya memasukkan sesuatu yang tidak ada dalam konteks python saat ini, itu akan gagal
NameError
.Pertimbangan keamanan dengan Python 2.7
input
:Karena tipe pengguna apa pun yang dievaluasi, itu menimbulkan masalah keamanan juga. Misalnya, jika Anda telah memuat
os
modul dalam program Andaimport os
, dan kemudian pengguna mengetikini akan dievaluasi sebagai ekspresi pemanggilan fungsi oleh python dan itu akan dieksekusi. Jika Anda menjalankan Python dengan hak istimewa yang ditingkatkan,
/etc/hosts
file akan dihapus. Lihat, betapa berbahayanya itu?Untuk mendemonstrasikan ini, mari kita coba menjalankan
input
fungsi lagi.Sekarang, ketika
input("Enter your name: ")
dieksekusi, ia menunggu input pengguna dan input pengguna adalah pemanggilan fungsi Python yang valid dan juga dipanggil. Itu sebabnya kami melihatEnter your name again:
prompt lagi.Jadi, Anda lebih baik dengan
raw_input
fungsi, seperti iniJika Anda perlu mengonversi hasilnya ke jenis lain, maka Anda dapat menggunakan fungsi yang sesuai untuk mengonversi string yang dikembalikan oleh
raw_input
. Misalnya, untuk membaca input sebagai bilangan bulat, gunakanint
fungsi, seperti yang ditunjukkan dalam jawaban ini .Dalam python 3.x , hanya ada satu fungsi untuk mendapatkan input pengguna dan itu disebut
input
, yang setara dengan Python 2.7raw_input
.sumber
Anda menjalankan Python 2, bukan Python 3. Agar ini berfungsi di Python 2, gunakan
raw_input
.sumber
Karena Anda menulis untuk Python 3.x, Anda akan ingin memulai skrip Anda dengan:
Jika Anda menggunakan:
Ini akan default ke Python 2.x. Ini ada di baris pertama skrip Anda, jika tidak ada yang dimulai dengan #! (alias shebang).
Jika skrip Anda baru mulai dengan:
Kemudian Anda dapat mengubahnya ke:
Meskipun pemformatan yang lebih pendek ini hanya dikenali oleh beberapa program, seperti peluncur, jadi ini bukan pilihan terbaik.
Dua contoh pertama jauh lebih banyak digunakan dan akan membantu memastikan kode Anda akan berfungsi pada mesin apa pun yang memasang Python.
sumber
Anda harus menggunakan
raw_input
karena Anda menggunakan python-2.7. Saat Anda menggunakaninput()
variabel (misalnyas = input('Name: ')
:), itu akan menjalankan perintah ON 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 (misalnyaf = raw_input('Name : ')
:), dan itu tidak akan menjalankannya di lingkungan Python tanpa membuat kesalahan yang mungkin:sumber
Untuk python 3 ke atas
itu akan menyelesaikan masalah pada pycharm IDE jika Anda memecahkan di situs online persis hackerrank kemudian gunakan:
sumber
Anda bisa melakukan:
atau:
sumber
Anda harus memasukkan input dalam tanda kutip tunggal atau ganda
sumber
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 adalah mengimpor:
ini memperbaiki kegunaan bagi kedua penafsir
Anda dapat membaca lebih lanjut tentang enam perpustakaan di sini
sumber
Kami menggunakan yang berikut ini yang berfungsi baik python 2 dan python 3
sumber
Bagi siapa pun yang mungkin mengalami masalah ini, ternyata itu bahkan jika Anda menyertakannya
#!/usr/bin/env python3
di awal skrip Anda, shebang diabaikan jika file tidak dapat dieksekusi.Untuk menentukan apakah file Anda dapat dieksekusi:
./filename.py
dari baris perintah-bash: ./filename.py: Permission denied
, jalankanchmod a+x filename.py
./filename.py
lagiJika Anda memasukkan
import sys; print(sys.version)
seperti yang disarankan Kevin, sekarang Anda akan melihat bahwa skrip sedang ditafsirkan oleh python3sumber
Kontribusi baik yang sebelumnya.
Terima kasih!
sumber
Ada dua cara untuk memperbaiki masalah ini,
Pertama adalah sederhana tanpa perubahan kode yang
menjalankan skrip Anda oleh Python3,
jika Anda masih ingin menjalankan python2 maka setelah menjalankan skrip python Anda, ketika Anda memasukkan input perlu diingat
string
maka mulailah mengetik dengan "input sesuai dengan tanda kutip ganda" dan itu akan bekerja di python2.7 danCara kedua adalah dengan perubahan kode,
gunakan impor di bawah ini dan jalankan dengan versi python apa pun
from six.moves import input
raw_input()
fungsi alih-alihinput()
fungsi dalam kode Anda dengan impor apa punstr()
fungsi sepertistr(input())
dan kemudian menetapkan ke variabel apa punSeperti yang disiratkan kesalahan :
nama 'dude' tidak didefinisikan yaitu untuk python 'dude' menjadi variabel di sini dan itu tidak memiliki nilai apa pun dari jenis yang didefinisikan python ditugaskan
jadi hanya menangis seperti bayi jadi jika kita mendefinisikan variabel 'dude' dan menetapkan nilai apa pun dan lolos, itu akan berhasil tetapi bukan itu yang kita inginkan karena kita tidak tahu apa yang akan dimasukkan pengguna dan terlebih lagi kita ingin menangkap input pengguna.
sumber
Anda dapat mengubah python mana yang Anda gunakan dengan IDE, jika Anda sudah mengunduh python 3.x itu tidak akan terlalu sulit untuk beralih. Tapi skrip Anda berfungsi dengan baik di python 3.x, saya hanya akan berubah
untuk
Karena dengan koma ia mencetak dengan spasi putih di antara
your name is
dan apa pun yang dimasukkan pengguna. DAN: jika Anda menggunakan 2.7, gunakan sajaraw_input
alih-alih input.sumber