是否可以检查运行时错误?从字符串中可以明显看出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
答案 0 :(得分:1)
尝试使用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
答案 1 :(得分:0)
也许是这样吗?
import subprocess
script_string = "prnt(\"Hello World!\")"
proc = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
res = proc.communicate(bytes(script_string, "UTF-8"))
它的基本作用是将字符串通过管道传递给python解释器。如果没有错误,则script_string有效。
编辑:res
将包含(stdout_data, stderr_data)
(请参阅https://docs.python.org/3/library/subprocess.html#subprocess.Popen.communicate)