You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ast.literal_eval处理游戏数据触发ValueError malformed node报错咨询

ast.literal_eval 报错原因与修复方案

核心原因

  • ast.literal_eval 仅支持解析Python原生字面量(字符串、数字、列表、字典、元组、布尔值、None、字节串),只要待解析内容中出现未被引号包裹的标识符(比如变量名、自定义常量名、JSON风格的关键字),就会被识别为ast.Name节点,触发malformed node or string报错,本次报错不属于bytes转str解码异常。
  • 最常见的触发场景是游戏返回的是类JSON结构而非Python字面量:JSON标准里的true/false/null对应Python的True/False/None,这些小写的未加引号关键字会被ast判定为非法Name节点,直接解析就会报错。

修复方案

  • 优先使用json模块解析:如果游戏返回数据是标准JSON格式,直接调用json.loads()处理即可自动完成关键字类型转换,不需要用到ast.literal_eval。
  • 必须使用ast.literal_eval的场景,先对原始字符串做关键字替换:
import ast

def parse_game_data(raw_str):
    processed_str = raw_str.replace("true", "True")\
                           .replace("false", "False")\
                           .replace("null", "None")
    return ast.literal_eval(processed_str)
  • 若替换后仍报错,可打印待解析的原始字符串,检查是否存在其他未被引号包裹的游戏自定义标识符,针对性做替换后再解析即可。

报错场景截图显示待解析内容中包含小写的true/false值,完全匹配上述问题特征。

内容的提问来源于stack exchange,提问作者Левый Тип

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 14:48:03