繁体   English   中英

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

[英]Python "safe" eval (string to bool/int/float/None/string)

我正在制作一个进行一些数据处理的 web 应用程序,所以我经常发现自己将字符串(来自 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

……然而,这对我来说似乎很丑陋。 有没有更干净的方法来做到这一点? 我发现了一个类似这样的旧讨论,但我想知道是否有一种快速而简单的方法(比如我不知道的库函数,或者一个聪明的单行程序?)。

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')}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM