- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
假设我有一个文件 example.py
: 导入示例
VVV = 2
DictionaryNameB = {
'a' : VVV,
'bb' : 'SomethingB',
'c' : False,
'ccc' : None,
'dddd' : 'true',
'eeeee' : 0.123456,
'f' : 2,
'h' : [1,2,3]
}
我写了一个使用 ast.literal_eval()
的函数:
def getDicFromFile(self, dic_name):
with open( 'example.py' ) as f:
file_data = f.read()
match = re.findall('%s[^{]+\{[^\}]+\}' % dic_name, file_data, re.MULTILINE)[0]
# print(match)
dicObject = ast.literal_eval(match[len(dic_name)+3:])
return dicObject
我收到错误 raise ValueError('malformed string') ; ValueError: 格式错误的字符串
我知道 ast.literal_eval()
无法解码变量 VVV
,还有其他方法吗?
最佳答案
你可以使用 asteval
,一个构建在 ast
解析树上以执行有限语句的库。它会开箱即用地处理您的示例:
from asteval import Interpreter
aeval = Interpreter()
aeval(file_data)
dicObject = aeval.symtable['DictionaryNameB']
或者,您可以只导入文件:
from importlib import import_module
module = import_module('example')
dicObject = module.DictionaryNameB
asteval
允许相当多的 Python 结构。你可以比较 Python Abstract Grammar aeval.node_handlers
映射注册了哪些处理程序,只需删除不需要的任何内容。例如,您可以删除函数定义和调用、循环、二进制操作 (binop
) 和异常处理。
关于python - ast.literal_eval 用于 python 中的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25867475/
我正在使用 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],它可能更安全,但除非
我是一名优秀的程序员,十分优秀!