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

关于ast.literal_eval处理带空格字符串报错的技术求助

问题原因及解决办法

核心原因

ast.literal_eval()的作用是解析合法的Python字面量表达式,比如带引号的字符串、数字、元组、列表、字典这类符合Python语法规范的字面量。

你的代码里,caption对应的值是一段带空格的普通文本,当你把它传给ast.literal_eval()时,相当于让它解析这段没有引号包裹的文本——Python语法中字符串必须用引号包裹,无引号且带空格的文本会被当成多个独立标识符,直接违反语法规则,因此触发SyntaxError。

至于name对应的值,它虽然没有空格,但包含/这类Python运算符,理论上ast.literal_eval()也应该报错,大概率是你测试时的误判,本质上它同样不是合法的Python字面量。只有size对应的值'(1024, 1024)'是合法的元组字面量字符串,才适合用ast.literal_eval()解析。

解决办法

  • 如果值本身就是普通字符串(比如caption和name),直接使用原变量v即可,无需调用ast.literal_eval();
  • 只有当值是表示Python字面量的字符串(比如size的元组字符串)时,才需要用ast.literal_eval()解析成对应的数据类型。

修改后的代码示例:

import ast
a = {'caption': 'A silhouette of two wine glasses clinking together against a beautiful sunset background, symbolizing connections and romance for over 50 singles.', 'name': 'images/MJ/94122817f243925a.PNG', 'size': '(1024, 1024)'}
for k, v in a.items():
    print(k)
    print(v)
    if k == 'size':
        print(ast.literal_eval(v))
    else:
        print(v)  # 普通字符串直接输出

内容的提问来源于stack exchange,提问作者Shon Otmazgin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 19:22:48