- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我一直在尝试让 Python3 的 ast.literal_eval() 函数工作(在交互式 Python session 中),但是——我阅读了它的文档描述——我做不到。
我的目标是替换这个:
>>> import logging
>>> eval('logging.DEBUG')
10
有了更安全的选择,这个:
>>> import logging, ast
>>> ast.literal_eval('logging.DEBUG')
Traceback (most recent call last):
...
ValueError: malformed node or string: <_ast.Attribute object at 0x7f1ccc55eeb8>
但后者不起作用(至少不是我的使用方式)。请注意,我还尝试了三重引号 和原始字符串 变体。
我相信我只是在这里遗漏了一个细微差别(例如,它可能不喜欢在模块中评估常量)。来自关于 ast.literal_eval() 的 Python-3 文档:
Safely evaluate an expression node or a string containing a Python literal or container display. The string or node provided may only consist of the following Python literal structures: strings, bytes, numbers, tuples, lists, dicts, sets, booleans, and None.
This can be used for safely evaluating strings containing Python values from untrusted sources without the need to parse the values oneself. It is not capable of evaluating arbitrarily complex expressions, for example involving operators or indexing.
感谢任何帮助。 =:) 提前谢谢您!
最佳答案
根据您在评论中给出的上下文,我建议您不要这样做:
ast.literal_eval
因为 logging.Debug
不是乱码:您从模块中请求一个值,这可能会产生任意副作用我的建议是使用 map :
log_levels = { 'DEBUG': logging.DEBUG, ... }
当您稍后从您的配置文件中读取log_level
(比如 DEBUG)时,您只需执行以下操作:
real_level = log_levels[log_level]
这样你就可以很容易地用 real_level = log_levels[log_level.upper()]
接受大小写错误,如果配置文件中有一个意外的值,你只会得到一个 KeyError
异常,没有不需要的评估的风险。
关于python - 协助 Python 的 ast.literal_eval ('a_string' ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36337082/
我正在使用 ast.literal_eval(str) 评估包含元组的字符串,例如 ('a', 'b', 'c')。然而,如果由于某种原因这个元组只包含一个元素,表达式将忽略括号并只返回元素: >>>
集合不可散列,因为它们是可变的。但是有没有办法仍然在 {1, 2, {3, 4}} 上使用literal_eval?我只想知道外部结构是一个集合,我不关心内部类型,但集合内的集合是可能的输入。 更新:
我已经从librosa库中提取了数据集。 This is top five data. These are the total columns. 这些数据为对象格式。 It has got '\n'
我正在使用 ast.literal_eval 将我从 json.loads() 收到的数据更改为 Python 字典;但是,如果我应该以一种完全不同的方式来解决这个问题 - 请随时指出这一点。 # A
目标:我想从下面的 request.POST 中提取 map 键中的 longlat 元组。 问题:我使用 ast.literal_eval 提取元组,但不知何故只返回第二个元组。 markers
ast.literal_eval() 是否适用于字典列表?对我来说,它给出了格式错误的字符串错误? [[u'ABN', u'12', u'', 2.69, u'222.222.222.222', u'
我收到格式错误的字符串错误。 这是我的测试 >>> eval("'Hello:: '+'fdsfds'") 'Hello:: fdsfds' >>> import ast >>> ast.litera
我在使用 ast.literal_eval() 时遇到了问题。在下面的示例中,我只想将字符串 (myText) 转换为字典。但是 ast.literal_eval() 尝试评估 并给我一个错误。我完全
这个问题在这里已经有了答案: can anyone tell me what i'm doing wrong? ast.literal_eval malformed node or string p
好吧... Unicode 字符串被编码为 Python 2.x 字符串(实际上是字节序列) Python 2.x 字符串被解码为 Unicode 字符串 Python UnicodeDecodeEr
运行 python 程序时出现以下错误。我使用的是 python 3.4,我已经安装了 Ferenda-0.1.7-py3.4,错误是: File "C:\Python34\lib\site-pack
我只是很好奇这是否存在风险,我想不出用户可能导致这种情况发生的方式......但这似乎令人担忧。 >>> import ast >>> help(ast.literal_eval) Help on f
我对相同的数据使用了 json dump 然后 json load。数据是 unicode 所以我把它转换成字符串。使用 ast.literla_eval 我试图获取要听写的字符串的类型,但出现错误
我是 python 的新手,尝试使用 ast.literal_eval 获取请求数据导致“语法无效”错误。 它打印我发送的数据,格式如下, 192.156.1.0,8181,database,admi
我有一个字符串 "{'datetime': datetime.datetime(2010, 11, 21, 0, 56, 58)}" 我想将其转换为它所代表的对象。使用 ast.literal_eva
我正在尝试从文件中读取元组的字符串表示形式,并将元组添加到列表中。这是相关代码。 raw_data = userfile.read().split('\n') for a in raw_data :
我遇到了这个代码并且它有效,但我不完全确定 何时使用 ast 和 是否存在性能问题当使用它而不是从 input() 获取字符串值时并将其转换为int。 import ast cyper_key = a
或者另一种方式来询问我想是否有一个文字将 literal_eval 转换为范围函数的等价物(不将整个数组作为范围发送)。 以下 import ast ast.literal_eval("range(0
假设我有一个文件 example.py: 导入示例 VVV = 2 DictionaryNameB = { 'a' : VVV, 'bb'
ast.literal_eval(node_or_string) 有什么已知的方法吗?的评估实际上并不安全? 如果是,是否有可用的补丁? (我已经知道 PyPy[sandbox],它可能更安全,但除非
我是一名优秀的程序员,十分优秀!