Ich habe eine Datenbank mit Fragen, und einige dieser Fragen bedürfen einer speziellen Validierung. Also fügte ich meinem Modell ein Feld namens py_validation hinzu und wenn diese Fragen beantwortet wurden, validiere ich sie, indem ich den Code ausführe, der in py_validation gespeichert ist. Wenn ich den Code in das interpereter einfügen, funktioniert es richtig, aber wenn ich es in exec übergeben, schlägt es mit dem Fehler:Warum wird beim Aufruf von exec() ein Syntaxfehler angezeigt?
Traceback (most recent call last):
File "<string>", line 2, in <fragment>
invalid syntax: <string>, line 2, pos 31
Der Code sieht so aus:
# 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)
Ich rufe es verwendet:
def do_py_validate(field, value):
exec field.py_validation
, so dass Variablenwert im lokalen Bereich während der Ausführung ist. Es macht nicht wirklich Sinn, dass der Code, der gut funktioniert, bei Ausführung so bailt.