有可能检查运行时错误吗?从字符串中很明显pri1nt是一个函数,并且未在此字符串中定义。
import ast
def is_valid_python(code):
try:
ast.parse(code)
except SyntaxError:
return False
return True
mycode = 'pri1nt("hello world")'
is_valid_python(mycode) # true
exec(mycode) # NameError: name 'pri1nt' is not defined
最佳答案
尝试使用BaseException
代替SyntaxError
。这将检查每种类型的python错误,包括NameError
。另外,由于ast.parse
永远不会引发任何错误,因此应该改用exec
。
所以应该是这样的:
def is_valid_python(code):
try:
exec(code)
except BaseException:
return False
Return True
mycode = 'pri1nt("hello world")'
is_valid_python(mycode) # false