有可能检查运行时错误吗?从字符串中很明显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

07-21 19:28