Daftar Referensi Python

eval() adalah fungsi bawaan untuk mengevaluasi satu ekspresi Python dari string atau code object, lalu mengembalikan hasil ekspresi tersebut.

Peringatan keamanan: jangan pernah memberikan input pengguna atau teks yang tidak tepercaya langsung ke eval(). Fungsi ini dapat menjalankan code berbahaya.

Sintaks

eval(source, globals=None, locals=None)

Parameter

Parameter Wajib? Keterangan
source Ya Ekspresi Python dalam bentuk string atau code object
globals Tidak Dictionary untuk namespace global yang tersedia bagi ekspresi
locals Tidak Mapping untuk namespace lokal yang tersedia bagi ekspresi

Nilai balik: hasil dari ekspresi yang dievaluasi. Tipe hasil bergantung pada ekspresinya.

Contoh

ekspresi = "10 + 5 * 2"
hasil = eval(ekspresi)

print(hasil)

Coba di IDE

Output:

20

Contoh Lainnya

Menyediakan nama lewat locals

rumus = "panjang * lebar"
data = {"panjang": 8, "lebar": 5}
global_terbatas = {"__builtins__": {}}

hasil = eval(rumus, global_terbatas, data)
print(hasil)

Coba di IDE

Output:

40

Membatasi __builtins__ membantu mengurangi nama yang tersedia, tetapi bukan mekanisme keamanan. Ekspresi pada contoh tetap harus berasal dari sumber yang kamu percaya.

Gunakan ast.literal_eval() untuk data literal

import ast

teks = '["apel", "mangga"]'
hasil = ast.literal_eval(teks)

print(hasil)
print(type(hasil).__name__)

Coba di IDE

Output:

['apel', 'mangga']
list

eval() menerima ekspresi, bukan pernyataan

try:
    eval("x = 10")
except SyntaxError:
    print("eval() hanya menerima ekspresi")

Coba di IDE

Output:

eval() hanya menerima ekspresi

Kesalahan Umum

  • Memasukkan teks dari input() langsung ke eval() dapat memberi penyerang kemampuan menjalankan code. Hindari pola ini.
  • Pernyataan seperti assignment, import, atau loop bukan ekspresi dan menghasilkan SyntaxError.
  • Nama yang tidak tersedia di namespace menghasilkan NameError.
  • Untuk membaca list, dictionary, angka, string, tuple, set, boolean, atau None dari teks, gunakan ast.literal_eval() sebagai pilihan yang lebih terbatas.

Pelajari Lebih Lanjut