SyntaxError: EOL при сканировании строкового литерала с помощью ast.parse - PullRequest
0 голосов
/ 04 июля 2018

следующий действительный код Python

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

но когда я использую метод синтаксического анализа модуля ast, он возвращает ошибку синтаксиса

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 голосов
/ 04 июля 2018

Вы должны выйти из \ в коде

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>
0 голосов
/ 04 июля 2018

Вам необходимо использовать многострочный комментарий '''YourCode''' или """YourCode"""

Ex:

import ast
code = "print('''hello\n''')"
print(ast.parse(code))
0 голосов
/ 04 июля 2018

Вы должны написать:

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