当尝试解析一个空字符串时,我得到了SyntaxError
。为什么它引发与解析'foo'
不同的错误?在ast.literal_eval
的源中,仅ValueError
显式提出。
In [1]: import ast
In [2]: ast.literal_eval('foo')
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-2-d8695a7c4a9f> in <module>()
----> 1 ast.literal_eval('foo')
/usr/lib/python2.7/ast.pyc in literal_eval(node_or_string)
78 return left - right
79 raise ValueError('malformed string')
---> 80 return _convert(node_or_string)
81
82
/usr/lib/python2.7/ast.pyc in _convert(node)
77 else:
78 return left - right
---> 79 raise ValueError('malformed string')
80 return _convert(node_or_string)
81
ValueError: malformed string
In [3]: ast.literal_eval('')
File "<unknown>", line 0
^
SyntaxError: unexpected EOF while parsing
最佳答案
ast
使用compile
将源字符串(必须是表达式)编译为AST。
如果源字符串不是有效的表达式(如空字符串),则SyntaxError
将引发compile
。另一方面,如果源字符串是有效的表达式(例如,像foo
这样的变量名),则compile
将成功,但是literal_eval
可能会失败,并带有ValueError
。
因此,在使用SyntaxError
时,您应该同时捕获ValueError
和literal_eval
。
关于python - ast.literal_eval : SyntaxError: unexpected EOF while parsing,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14634925/