如何解释ast.literal_eval() ValueError消息?

问题描述 投票:0回答:1

当尝试在非常大的字符串上使用

ast.literal_eval()
时,我收到错误
ValueError: malformed node or string on line 1: <ast.Name object at 0x000001FAAA9B1420>
。遍历整个字符串寻找
ast.literal_eval()
在哪里找到它无法处理的类型的项目是非常耗时的。错误消息似乎以某种十六进制值的形式给出了错误的位置,但我如何解释
0x000001FAAA9B1420
以查看它在输入字符串中的位置?

如何通过引用

ast.literal_eval()
错误消息来查看
ValueError
出错的字符串中的索引?有什么办法可以看到这个索引吗?

python abstract-syntax-tree valueerror
1个回答
0
投票

根据 jasonharper 的评论,这是对我有用的解决方案:

parsedString = ast.parse(reallyLongString)
for node in ast.walk(parsedString):
     if isinstance(node, ast.Name): #Detects variable names
          print(reallyLongString[node.col_offset - 5:node.col_offset + 5])

这会打印字符串中会出错的部分

ast.literal_eval
。结果我的问题是 API 响应给了我非 Python 值,而不是
None
True
False
。所以最终的解决方案是:

reallyLongString = reallyLongString.replace('null', 'None')
reallyLongString = reallyLongString.replace('true', 'True')
reallyLongString = reallyLongString.replace('false', 'False')
reallyLongDict = ast.literal_eval(reallyLongString)
© www.soinside.com 2019 - 2024. All rights reserved.