为什么在调用exec()时会出现语法错误?

时间:2010-11-18 14:13:49

标签: python

我有一个问题数据库,其中一些问题需要特殊验证。所以,我在我的模型中添加了一个名为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

以便变量值在执行时处于本地范围。那些工作得很好的代码并没有多大意义,这样执行就会失败。

1 个答案:

答案 0 :(得分:5)

原来有一个简单的答案。该字符串包含\ r \ n字符,python吞咽不快乐。答案来了,因为我试图找出如何使文件像对象来读取字符串。解决方案是:

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

这几乎和Whitespace中的编程一样有趣。

相关问题