python中l(wèi)iteral_eval函數(shù)的使用小結(jié)
基本用法
from ast import literal_eval
# 將字符串轉(zhuǎn)換為Python對象
string_list = "[1, 2, 3]"
real_list = literal_eval(string_list)
print(real_list) # 輸出: [1, 2, 3]
print(type(real_list)) # 輸出: <class 'list'>
string_dict = "{'name': 'Alice', 'age': 25}"
real_dict = literal_eval(string_dict)
print(real_dict) # 輸出: {'name': 'Alice', 'age': 25}
print(type(real_dict))
與 eval() 的區(qū)別
1、安全性:literal_eval 只能解析 Python 字面量結(jié)構(gòu)(字符串、數(shù)字、元組、列表、字典、布爾值和 None),不會執(zhí)行任意代碼,因此比 eval() 安全得多。
# eval() 會執(zhí)行任何代碼 - 不安全!
eval("__import__('os').system('rm -rf /')") # 危險!
# literal_eval() 會拒絕執(zhí)行非字面量表達(dá)式
literal_eval("__import__('os').system('rm -rf /')") # 會引發(fā) ValueError
2、功能限制:literal_eval 不能計算表達(dá)式或調(diào)用函數(shù),只能處理基本的 Python 數(shù)據(jù)結(jié)構(gòu)。
支持的數(shù)據(jù)類型
literal_eval 可以安全地評估以下 Python 字面量結(jié)構(gòu):
1、字符串
2、數(shù)字(整數(shù)、浮點(diǎn)數(shù)、復(fù)數(shù))
3、元組
4、列表
5、字典
6、布爾值(True/False)
7、None
使用場景
1、安全地從字符串加載數(shù)據(jù)結(jié)構(gòu):當(dāng)需要從外部源(如配置文件、用戶輸入)加載數(shù)據(jù)時。
2、替代 pickle/json:對于簡單的數(shù)據(jù)結(jié)構(gòu),比 pickle 安全,比 json 更靈活(json 不支持所有 Python 數(shù)據(jù)類型)。
3、配置文件解析:當(dāng)配置需要包含復(fù)雜數(shù)據(jù)結(jié)構(gòu)時。
注意事項
1、雖然比 eval() 安全,但仍應(yīng)謹(jǐn)慎處理不受信任的輸入。
2、對于非常大的數(shù)據(jù)結(jié)構(gòu),可能會有性能問題。
3、不支持 Python 3 的字節(jié)字面量(如 b’bytes’)。
到此這篇關(guān)于python中l(wèi)iteral_eval函數(shù)的使用小結(jié)的文章就介紹到這了,更多相關(guān)python literal_eval 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python標(biāo)準(zhǔn)庫使用OrderedDict類的實例講解
今天小編就為大家分享一篇關(guān)于Python標(biāo)準(zhǔn)庫使用OrderedDict類的實例講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-02-02
Python通過Schema實現(xiàn)數(shù)據(jù)驗證方式
這篇文章主要介紹了Python通過Schema實現(xiàn)數(shù)據(jù)驗證方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-11-11
python數(shù)據(jù)結(jié)構(gòu)的排序算法
下面是是對python數(shù)據(jù)結(jié)構(gòu)的排序算法的一些講解及示意圖,感興趣的小伙伴一起來學(xué)習(xí)吧2021-08-08
Python調(diào)用VBA實現(xiàn)保留原始樣式的表格合并方法
本文主要介紹了Python調(diào)用VBA實現(xiàn)保留原始樣式的表格合并方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01
關(guān)于Python 多重繼承時metaclass conflict問題解決與原理探究
這篇文章主要介紹了Python 多重繼承時metaclass conflict問題解決與原理探究 ,需要的朋友可以參考下2022-10-10

