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
Lepaskan: 2024-12-26 10:22:09
asal
297 orang telah melayarinya

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'}"
Salin selepas log masuk

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)
Salin selepas log masuk

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')")
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan