2010-11-18 151 views
0

我有一個問題的數據庫,其中一些問題需要特殊驗證。所以,我在我的模型中添加了一個名爲py_validation的字段,當這些問題得到解答時,我通過運行存儲在py_validation中的代碼來驗證它們。當我將代碼粘貼到interpereter,它工作正常,但是當我將它傳遞到EXEC,它失敗,出現錯誤:爲什麼exec()被調用時會出現語法錯誤?

Traceback (most recent call last): 
    File "<string>", line 2, in <fragment> 
invalid syntax: <string>, line 2, pos 31 

代碼如下:

# This code relies on the field type being a char field 
if len(value.split('\n')) < 5: 
    raise ValidationError(_("You must specify at least 5 widgets, one per line")) 
super(CharField, self).validate(value) 

我打電話它使用:

def do_py_validate(field, value): 
    exec field.py_validation 

因此變量值在執行時在本地範圍內。不太合理的代碼工作得很好,當這樣執行時會釋放。

回答

5

原來有一個簡單的答案。該字符串包含\ r字符,python並不高興吞嚥。答案來了,因爲我試圖弄清楚如何讓對象等文件讀取字符串。解決方案是:

def do_py_validate(field, value): 
    exec field.py_validation.replace('\r', '') 

這和編程在Whitespace中幾乎一樣有趣。

相關問題