eval函數(shù)在Python中做數(shù)據(jù)類型的轉(zhuǎn)換還是很有用的梳星。它的作用就是把數(shù)據(jù)還原成它本身或者是能夠轉(zhuǎn)化成的數(shù)據(jù)類型汗侵。
那么eval和ast.literal_val()的區(qū)別是什么呢?
eval在做計(jì)算前并不知道需要轉(zhuǎn)化的內(nèi)容是不是合法的(安全的)python數(shù)據(jù)類型。只是在調(diào)用函數(shù)的時(shí)候去計(jì)算椿疗。如果被計(jì)算的內(nèi)容不是合法的python類型就會(huì)拋出異常。
ast.literal則會(huì)判斷需要計(jì)算的內(nèi)容計(jì)算后是不是合法的python類型攀痊,如果是則進(jìn)行運(yùn)算岸霹,否則就不進(jìn)行運(yùn)算。
因此纷铣,推薦使用ast.literal_eval
JSON 的標(biāo)準(zhǔn):雙引號(hào)而非單引號(hào)卵史!
這個(gè)問(wèn)題是由于使用json.loads報(bào)錯(cuò)寫的,這個(gè)時(shí)候可嘗試ast.literal_eval