关于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
相关产品推荐
相关产品推荐

