Menukar Perwakilan Rentetan Kamus kepada Kamus
Pertimbangkan tugas menukar perwakilan rentetan kamus kepada kamus. Contohnya:
s = "{'muffin' : 'lolz', 'foo' : 'kitty'}"
Seseorang mungkin tergoda untuk menggunakan fungsi eval untuk tujuan ini, tetapi adalah lebih baik untuk mengelakkan eval kerana potensi risiko keselamatannya.
Sebaliknya, pertimbangkan untuk menggunakan Fungsi ast.literal_eval disediakan oleh perpustakaan standard Python:
import ast dictionary = ast.literal_eval(s)
Fungsi ast.literal_eval menilai dengan selamat rentetan yang mengandungi ungkapan Python. Ia hanya membenarkan struktur literal seperti rentetan, nombor, tupel, senarai, kamus, boolean dan Tiada, memastikan ungkapan selamat untuk dinilai.
Kaedah ini lebih selamat daripada menggunakan eval, kerana ia menghalang pelaksanaan kod sewenang-wenangnya yang berpotensi menjejaskan sistem anda. Contohnya:
# Dangerous example: eval("shutil.rmtree('mongo')") # Safe example: ast.literal_eval("shutil.rmtree('mongo')")
Dalam contoh pertama, eval melaksanakan rentetan sebagai kod Python, yang mengakibatkan ralat kerana mongo bukan direktori yang sah. Dalam contoh kedua, ast.literal_eval menilai dengan selamat rentetan sebagai ungkapan literal dan menimbulkan ralat yang menunjukkan bahawa rentetan itu rosak.
Atas ialah kandungan terperinci Bagaimana untuk Menukar Perwakilan Rentetan Kamus kepada Kamus dalam Python dengan Selamat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!