python eval和literal_eval


eval是python中一個相當智能的函數,把參數當成表達式,進行最大限度的解析,

比如:

a = "[[1,2], [3,4], [5,6], [7,8], [9,0]]"

b = eval(a)

b
Out[3]: [[1, 2], [3, 4], [5, 6], [7, 8], [9, 0]]

type(b)
Out[4]: list

a = "{1: 'a', 2: 'b'}"

b = eval(a)

b
Out[7]: {1: 'a', 2: 'b'}

type(b)
Out[8]: dict

a = "([1,2], [3,4], [5,6], [7,8], (9,0))"

b = eval(a)

b
Out[11]: ([1, 2], [3, 4], [5, 6], [7, 8], (9, 0))

從以上可以看出,eval相當的好用,但是它也能解析一些輸入命令,比如:

eval("__import__('os').system('dir')")

這樣寫會將當前目錄下的文件全都顯示出來,如果換成刪除,那麻煩就大了。

所以,很多時候我們需要在轉換前先檢查下表達式的合法性,或者直接使用literal_eval,這個函數會自動的檢查安全性和合法性,如果有問題就會直接拋出異常,使用literal_eval前要先導入ast。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM