Python“安全”eval(字符串到bool / int / float / None / string)

时间:2010-12-08 14:34:52

标签: python parsing type-conversion

我正在制作一个进行一些数据处理的webapp,所以我经常发现自己将字符串(从URL或文本文件)解析为Python值。

我使用的函数是“一种”更安全的eval版本(除非它无法读取字符串,否则它将保持字符串):

def str_to_value(string):
    for atom in (True, False, None):
        if str(atom) == string:
            return atom
    else:
        try:
            return int(string)
        except ValueError:
            try:
                return float(string)
            except ValueError:
                return string

...然而,这对我来说似乎非常难看。这样做有更干净的方法吗?我发现了old discussion这样的东西,但是我想知道是否有一种快速而简单的方法(比如我不知道的库函数,还是一个聪明的单行程?)。 / p>

1 个答案:

答案 0 :(得分:29)

ast.literal_eval()

>>> ast.literal_eval('{False: (1, 0x2), True: [3.14, 04, 0b101], None: ("6", u"7", r\'8\')}')
{False: (1, 2), True: [3.1400000000000001, 4, 5], None: ('6', u'7', '8')}