当前位置: 首页 > 面试题库 >

Python“安全”评估(字符串转换为bool / int / float / None / string)

司凡
2023-03-14
问题内容

我正在制作一个进行一些数据处理的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

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


问题答案:

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


 类似资料:
  • 问题内容: 我想将字符串转换为最严格的数据类型:int或float。 我有两个字符串: 如何在Python中确定value1应该为Float,value2应该为Integer? 问题答案:

  • 我只是无法在c中转换不同的数据类型,我知道c是一种强类型语言,所以我在这里使用了,但我面临一个问题,错误消息是 从“std::string{aka std::basic_string}类型转换为“int”类型的static_

  • 注意:这个问题包含不建议使用的前1.0代码!不过,答案是正确的。 要在Rust中将转换为,我可以执行以下操作: 我知道如何将转换为的唯一方法是获取其中的一个片段,然后像这样使用: 有没有办法直接将转换为?

  • 我想将MongoDB值字段的字符串转换为整数,然后计算平均值。 这是我的JSON: 但我也得到了这样的输出: {“_id”:ObjectId(“5C509604FC007808C427EDCB”),“values”: [“24.3”,“23.3”,“25.3”,“31.3”,“90.3”],“avgvalue”:null} 期望值应该是values字段的平均值。 我需要对嵌套文档值进行某种转换。

  • 问题内容: 是否有任何固定的Python方法将Python中的Integer(或Long)转换为二进制字符串? Google上有无数的dec2bin()函数…但是我希望可以使用内置函数/库。 问题答案: Python的字符串格式方法可以采用格式规范。

  • 问题内容: 我正在编写一个程序,其中将方程式作为字符串输入,然后求值。到目前为止,我已经提出了: 我既需要此方程式的字符串版本,也需要评估的版本。但是,这是非常危险的功能。但是,使用是行不通的,因为这是一个方程式。是否存在一个Python函数,该函数将评估字符串中的数学表达式,就像输入数字一样? 问题答案: 一种方法是使用numexpr。它主要是用于优化(和多线程)numpy操作的模块,但它也可以