gpt4 book ai didi

python - ast.literal_eval 用于 python 中的变量?

转载 作者:太空宇宙 更新时间:2023-11-03 13:43:13 25 4
gpt4 key购买 nike

假设我有一个文件 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com