2016-10-04 107 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'有效代碼嗎? –

相關問題