Если у меня есть строка кода Python, как определить, действительно ли она действительна, т.е., если она введена в подсказке Python, это приведет к повышению значения SyntaxError или нет? Я думал, что использование compiler.parse
будет работать, но, видимо, этот модуль был удален в Python 3. Есть ли способ сделать это, который также работает на Python 3. Очевидно, что я не хочу выполнять код, просто проверьте его синтаксис.
Как определить, содержит ли строка действительный код Python
Ответ 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)
.