小编典典

ast.literal_eval:SyntaxError:解析时出现意外的EOF

python

当尝试解析一个空字符串时,我得到一个SyntaxError。为什么它引发与解析a不同的错误'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

阅读 409

收藏
2021-01-20

共1个答案

小编典典

ast用于compile将源字符串(必须是表达式)编译为AST。

如果源字符串不是有效的表达式(如空字符串),SyntaxError则将引发a
compile。另一方面,如果源字符串是一个有效的表达式(例如,变量名称,如foo),compile将成功,但literal_eval可能会失败,并显示ValueError

因此,在使用SyntaxErrorValueError时都应同时捕获literal_eval

2021-01-20