Cómo saber si una cadena contiene código válido de Python

Si tengo una cadena de código Python, ¿cómo puedo saber si es válido, es decir, si se ingresa en el indicador de Python, generaría un error de syntax o no? Pensé que usar compiler.parse funcionaría, pero aparentemente ese módulo se eliminó en Python 3. ¿Hay alguna forma de hacerlo que también funcione en Python 3. Obviamente, no quiero ejecutar el código, solo verifique su syntax.

Utilice 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 

El módulo del comstackdor es ahora un incorporado .

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

Comstackr la fuente en un código u objeto AST. Los objetos de código pueden ser ejecutados por una sentencia exec o evaluados por una llamada a eval (). source puede ser una cadena o un objeto AST. Consulte la documentación del módulo ast para obtener información sobre cómo trabajar con objetos AST.

El analizador de AST es ahora un módulo separado .

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

Analizar una expresión en un nodo AST. Equivalente a compile(expr, filename, mode, ast.PyCF_ONLY_AST) .