Python中将数据类型转化成原始类型

eval函数

将字符串string对象转化为有效的表达式参与求值运算返回计算结果。

>>> s='8*8'
>>> eval(s)
64
>>> eval('2+5*4')
22
>>> x=1
>>> y=4
>>> eval('x+y')
5
>>> eval('98.9')
98.9
>>> eval('9.9\n')
9.9
>>> eval('9.9\n\t\r  \t\r\n')
9.9

eval可以将字符串转换成字典,列表,元组

str_list = '[1, 2, 3, 4]'
result = eval(str_list)
print(result)  # [1, 2, 3, 4]
str_dict = "{'name':'python','age':20}"
result = eval(str_dict )
print(result)  # {'name': 'python', 'age': 20}

ast.literal_eval

ast.literal_eval是python针对eval方法存在的安全漏洞而提出的一种安全处理方式。ast模块就是帮助Python应用来处理抽象的语法解析的,而该模块下的literal_eval()函数:则会判断需要计算的内容计算后是不是合法的Python类型,如果是则进行运算,否则就不进行运算。

import ast

x = "{'a':10,'b':20,'c':30}"
print(ast.literal_eval(x))
# {'a': 10, 'b': 20, 'c': 30}

y = "[5,10,15]"
print(ast.literal_eval(y))
# [5, 10, 15]

z = "(1,2,3)"
print(ast.literal_eval(z))
# (1, 2, 3)

出于安全考虑,对字符串进行类型转换的时候,最好使用ast.literal_eval()。
ast.literal_eval 不能执行上述 eval 函数的计算操作。

import ast
ast.literal_eval('2+6')

'''
Traceback (most recent call last):
  File "d:\program files\python37\Lib\code.py", line 90, in runcode
    exec(code, self.locals)
  File "", line 1, in 
  File "d:\program files\python37\Lib\ast.py", line 91, in literal_eval
    return _convert(node_or_string)
  File "d:\program files\python37\Lib\ast.py", line 90, in _convert
    return _convert_signed_num(node)
  File "d:\program files\python37\Lib\ast.py", line 63, in _convert_signed_num
    return _convert_num(node)
  File "d:\program files\python37\Lib\ast.py", line 55, in _convert_num
    raise ValueError('malformed node or string: ' + repr(node))
ValueError: malformed node or string: <_ast.BinOp object at 0x000001AC3D88FB70>
'''

你可能感兴趣的:(python,python,literal_eval,eval,字符串转换数据类型)