TL; DR
input
berfungsi dalam Python 2.7, mengevaluasi apa pun yang Anda masukkan, sebagai ekspresi Python. Jika Anda hanya ingin membaca string, gunakan raw_input
fungsi dalam Python 2.7, yang tidak akan mengevaluasi string baca.
Jika Anda menggunakan Python 3.x, raw_input
telah diubah namanya menjadi input
. Mengutip catatan rilis Python 3.0 ,
raw_input()
diubah namanya menjadi input()
. Yaitu, input()
fungsi baru membaca garis dari sys.stdin
dan mengembalikannya dengan garis baru tertinggal dilucuti. Ini memunculkan EOFError
jika input dihentikan sebelum waktunya. Untuk mendapatkan perilaku lama input()
, gunakaneval(input())
Dalam Python 2.7 , ada dua fungsi yang dapat digunakan untuk menerima input pengguna. Yang satu input
dan yang lainnya raw_input
. Anda bisa memikirkan hubungan di antara mereka sebagai berikut
input = eval(raw_input)
Pertimbangkan potongan kode berikut untuk memahami ini dengan 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 dalam konteks Python saat ini. Ketika saya mengetik dude
sebagai input, ia menemukan bahwa dude
terikat dengan nilai thefourtheye
dan hasil evaluasi menjadi thefourtheye
dan yang ditugaskan input_variable
.
Jika saya memasukkan sesuatu yang tidak ada dalam konteks python saat ini, itu akan gagal 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 input
:
Karena tipe pengguna apa pun yang dievaluasi, itu menimbulkan masalah keamanan juga. Misalnya, jika Anda telah memuat os
modul dalam program Anda import os
, dan kemudian pengguna mengetik
os.remove("/etc/hosts")
ini 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.
>>> dude = "thefourtheye"
>>> input("Enter your name: ")
Enter your name: input("Enter your name again: ")
Enter your name again: dude
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 melihat Enter your name again:
prompt lagi.
Jadi, Anda lebih baik dengan raw_input
fungsi, seperti ini
input_variable = raw_input("Enter your name: ")
Jika 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, gunakan int
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.7 raw_input
.
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?