SyntaxError:使用ast.parse扫描字符串文字时出现EOL

时间:2018-07-04 07:24:44

标签: python parsing syntax-error abstract-syntax-tree

以下有效的python代码

In [49]: print('hello\n')
hello

但是当我使用ast模块的parse方法时,它会返回语法错误

In [47]: code = "print('hello\n')"

In [48]: ast.parse(code)
  File "<unknown>", line 1
    print('hello
           ^
SyntaxError: EOL while scanning string literal

In [51]: eval(code)
  File "<string>", line 1
    print('hello
        ^
SyntaxError: invalid syntax

在这种情况下,为什么ast模块无法解析有效的python代码?

3 个答案:

答案 0 :(得分:2)

您必须转义代码中的\

code = "print('hello\\n')"
ast.parse(code)
# <_ast.Module object at 0x7fd68cb48cc0> 

或者您可以添加r前缀以指示需要转义字符串中的所有内容

code = r"print('hello\n')"
ast.parse(code)
# <_ast.Module object at 0x7fd68cb48ef0>

答案 1 :(得分:1)

您应该写:

code = "print('hello\\n')"

答案 2 :(得分:1)

您需要使用多行注释'''YourCode'''"""YourCode"""

例如:

import ast
code = "print('''hello\n''')"
print(ast.parse(code))