Как определить, содержит ли строка действительный код Python - программирование
Подтвердить что ты не робот

Как определить, содержит ли строка действительный код Python

Если у меня есть строка кода Python, как определить, действительно ли она действительна, т.е., если она введена в подсказке Python, это приведет к повышению значения SyntaxError или нет? Я думал, что использование compiler.parse будет работать, но, видимо, этот модуль был удален в Python 3. Есть ли способ сделать это, который также работает на Python 3. Очевидно, что я не хочу выполнять код, просто проверьте его синтаксис.

4b9b3361

Ответ 1

Используйте ast.parse:

import ast
def is_valid_python(code):
   try:
       ast.parse(code)
   except SyntaxError:
       return False
   return True

>>> is_valid_python('1 // 2')
True
>>> is_valid_python('1 /// 2')
False

Ответ 2

Модуль компилятора теперь является встроенным.

compile(source, filename, mode[, flags[, dont_inherit]])

Скомпилируйте источник в код или объект AST. Объектами кода могут быть выполняемый оператором exec или оцениваемый вызовом eval(). источник может быть либо строкой, либо объектом AST. Обратитесь к модулю ast документацию для получения информации о том, как работать с объектами AST.

Анализатор AST теперь является отдельным модулем.

ast.parse(expr, filename='<unknown>', mode='exec')

Разделите выражение в AST node. Эквивалентно compile(expr, filename, mode, ast.PyCF_ONLY_AST).