Python“安全"评估(字符串转换为bool/int/float/None/string) [英] Python "safe" eval (string to bool/int/float/None/string)

查看:65
本文介绍了Python“安全"评估(字符串转换为bool/int/float/None/string)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在制作一个进行一些数据处理的Web应用程序,因此经常发现自己将字符串(来自URL或文本文件)解析为Python值.

I'm making a webapp that does some data processing, so I frequently find myself parsing strings (from an URL or a text file) into Python values.

我使用的函数类似于eval的安全版本(除非它不能读取字符串,而是保留字符串):

I use a function that is "kind of" a safer version of eval (except that if it can't read the string, it stays a string):

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

...但是,这对我来说似乎很难看.有没有更清洁的方法可以做到这一点?我发现了旧讨论或类似的东西,但是我想知道是否有没有一种快速简单的方法(例如我不知道的库函数,还是一个聪明的单行代码?).

... however, this seems very ugly to me. Is there a cleaner way of doing this? I found an old discussion os something like this, but I'm wondering if there isn't a quick and simple way (like a library function I don't know of, or a clever one-liner?).

推荐答案

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

这篇关于Python“安全"评估(字符串转换为bool/int/float/None/string)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆