
[英]literal_eval returns malformed string given a string without quote
[英]Python's literal_eval says string 'a,b,c' is malformed
literal_eval
文档指出:
安全地评估包含Python文字或容器显示的表达式节点或Unicode或Latin-1编码的字符串。 提供的字符串或节点只能由以下Python文字结构组成: 字符串 ,数字, 元组 ,列表,字典,布尔值和无。
我想解析一个表示元组的unicode字符串。 为什么在以下输入中出现ValueError: malformed string
?
print literal_eval(unicode('abc'))
print literal_eval(unicode('c,d,e'))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.5/ast.py", line 84, in literal_eval
return _convert(node_or_string)
File "/usr/lib/python3.5/ast.py", line 55, in _convert
return tuple(map(_convert, node.elts))
File "/usr/lib/python3.5/ast.py", line 83, in _convert
raise ValueError('malformed node or string: ' + repr(node))
ValueError: malformed node or string: <_ast.Name object at 0x7f1da47e7860>
但是,此示例确实起作用:
print literal_eval(unicode('1,2,3'))
(1, 2, 3)
literal_eval
只解析文字 。 您的字符串是变量名称( abc
, c
, d
, e
)的元组。 相反,您需要一个字符串元组或一个带逗号的字符串。 任何一种都需要两个级别的引号。
# string
print(literal_eval("'abc'"))
'abc'
print(literal_eval("'c,d,e'"))
'c,d,e'
# tuple of strings
print(literal_eval("'c','d','e'"))
('c', 'd', 'e')
您的最后一个示例是一个整数元组,它们都是文字,因此可以成功解析。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.