2014-05-10 65 views
0

我正在查找代碼以檢查代表函數的函數頭的字符串是否在語法上正確。Python - 檢查字符串中函數代碼的語法

這裏是我的字符串例如:

'''+'def __init__(self,{arg})'.format(arg = ','.join(i for i in someListOranArgPassedIn),)+''': 

如果此功能被定義爲

def __init__(self,,...a,,//b): 

,並違背了語法規則,我能加入到引發異常?

回答

-1

使用here中的功能。

import ast 
def is_valid_python(code): 
    try: 
     ast.parse(code) 
    except SyntaxError: 
     return False 
    return True 

test_args = lambda args: "def init(self, {arg}):\n\tpass".format(arg = ",".join(args)) 
print is_valid_python(test_args(["a", "b"])) 
print is_valid_python(test_args(["", "...a", "", "//b"])) 
+0

僅僅返回''失敗。我建議你使用'compile'而不是'ast.parse'。 – Veedrac

+0

@Veedrac,我沒有關注。爲什麼'return'是一個函數中的參數? – dilbert

+0

'is_valid_python(「return」)'給出'True';它應該給出'假'。用'compile'做一個完整的編譯就可以實現這一點。 – Veedrac