2016-10-04 78 views
0

我正在为vk.com写一些简单的网页解释器。我查找消息,检查它们是否是有效的Python代码,然后我想执行该代码,并将任何stdout返回给代码发件人。我已经实现了任何代码检查器。检查字符串是否包含有效的Python代码

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

你可以给出一个返回'True'的非代码示例。 – AChampion

+0

>>> is_valid('test') 代码没问题。 True – MaxLunar

+4

这是有效的代码 - 一个标识符。 – AChampion

回答

1

请记住,运行时错误和语法解析错误之间的区别是在你的情况和例子显著。声明:

test 

有效代码。尽管当Python VM执行代码时,该语句将抛出NameError,但解析器在分析语句之前不会知道它实际上未分配值,所以这是运行时错误,而不是语法错误的原因。

+0

谢谢!我通过抛出'NameError'来修复它,然后 – MaxLunar

+1

@MaxLunar你不能抛出一个NameError,因为你如何知道用户的代码正在使用一个未赋值的变量? –

+0

@MaxLunar我认为你在这里有一个误解。是'x + 1'有效代码吗? –

相关问题