我有一个问题数据库,其中一些问题需要特殊验证。所以,我在我的模型中添加了一个名为py_validation的字段,当这些问题得到解答时,我通过运行存储在py_validation中的代码来验证它们。当我将代码粘贴到interpereter中时,它可以正常工作,但是当我将它传递给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
以便变量值在执行时处于本地范围。那些工作得很好的代码并没有多大意义,这样执行就会失败。
答案 0 :(得分:5)
原来有一个简单的答案。该字符串包含\ r \ n字符,python吞咽不快乐。答案来了,因为我试图找出如何使文件像对象来读取字符串。解决方案是:
def do_py_validate(field, value):
exec field.py_validation.replace('\r', '')
这几乎和Whitespace中的编程一样有趣。