我正在为vk.com编写一些简单的网络解释器。我查找消息,检查它们是否是有效的Python代码,然后我想执行该代码,并将任何stdout
返回给代码发送者。我已经实现了除代码检查之外的任何东西。
import ast
def is_valid(code):
try:
ast.parse(code)
except SyntaxError:
print('Input isnt code.')
return False
print('Code is ok.')
return True
无论发生什么事, is_valid()
总会返回True
。我真的很困惑......
答案 0 :(得分:1)
请记住,在您的示例和示例中,运行时错误和解析器错误之间的区别很重要。声明:
test
是有效的代码。即使在Python VM执行代码时此语句将抛出NameError
,解析器也不会知道在解析语句之前它实际上没有分配值,这就是为什么它和&#39} #39;运行时错误,而不是语法错误。