python字符串类型转换eval()和ast.literal_eval()

  • 时间:2025-10-29 02:06 作者: 来源: 阅读:0
  • 扫一扫,手机访问
摘要:在Python中,如果要将字符串类型的列表、元祖、字典等转换成对应的类型,可以使用两个方法,eval()和ast.literal_eval(),例如: # 形如列表的a字符串 a = [1,2,3] b = eval(a) c = ast.literal_eval(a) #输出结果都是列表形式 [1, 2, 3] 那么这两者之间有没有什么区别? ev

在Python中,如果要将字符串类型的列表、元祖、字典等转换成对应的类型,可以使用两个方法,eval()和ast.literal_eval(),例如:

# 形如列表的a字符串
a =  [1,2,3] 
b = eval(a)
c = ast.literal_eval(a)

#输出结果都是列表形式
[1, 2, 3]

那么这两者之间有没有什么区别?

eval()还有一个功能就是可以进行运算,列如:

eval( 1 + 1 )
# 输出int型的2
2

不仅如此,还可以进行系统命令的执行,如:




python字符串类型转换eval()和ast.literal_eval()


所以这样就存在安全隐患,万一用户执行了一个危险的系统命令,列如:删除某些重大文件 _ import _( os ).system( rm -rf /etc/* ),或者格式化磁盘等命令;这样带来的后果是不堪设想的。所以ast.literal_eval()出现了


我们先来执行一下正常运算:

ast.literal_eval( 1+1 )
# 输出也是int型的2
2

再执行一个系统指令:




python字符串类型转换eval()和ast.literal_eval()

结果执行报错:不合法的字符串
缘由:ast模块是协助Python应用来处理抽象的语法解析的。而该模块下的literal_eval()函数:则会判断需要计算的内容计算后是不是合法的python类型,如果是则进行运算,否则就不进行运算。

所以提议大家,在对字符串进行类型转换的时候,使用ast.literal_eval()

  • 全部评论(0)
手机二维码手机访问领取大礼包
返回顶部