Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Menukar Perwakilan Rentetan Kamus kepada Kamus dalam Python dengan Selamat?

Bagaimana untuk Menukar Perwakilan Rentetan Kamus kepada Kamus dalam Python dengan Selamat?

DDD
DDDasal
2024-12-26 10:22:09293semak imbas

How to Safely Convert String Representations of Dictionaries to Dictionaries in Python?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn