当尝试解析一个空字符串时,我得到一个SyntaxError。为什么它引发与解析a不同的错误'foo'?在来源中ast.literal_eval只有ValueError明确提出。
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。
ast
compile
如果源字符串不是有效的表达式(如空字符串),SyntaxError则将引发a compile。另一方面,如果源字符串是一个有效的表达式(例如,变量名称,如foo),compile将成功,但literal_eval可能会失败,并显示ValueError。
foo
literal_eval
因此,在使用SyntaxError和ValueError时都应同时捕获literal_eval。