2010-11-18 13 views
0

Sorularım için bir veri tabanım var ve bu soruların birkaçı özel doğrulama gerektiriyor. Bu nedenle, py_validation adı verilen modelime bir alan ekledim ve bu sorular yanıtlandığında, bunları py_validation içinde saklanan kodu çalıştırarak doğrularım. Ben interpereter yapıştırın zaman, düzgün çalışır, ancak ben exec içine geçerken, bu hata ile başarısız: Sizi aramamınBu, exec() çağrıldığında neden bir sözdizimi hatası alıyor?

# 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) 

: gibi

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

kod görünüyor kullanarak, değişken değer, yürütülürken yerel kapsamda olacak şekilde

. Tam olarak işe yarayan kodun, böyle yapıldığında kefalet yapması mantıklı değil.

cevap

5

Basit bir yanıt almak için çıkıyor. Dize, python'un yutmadan mutlu olmadığı karakterleri içeriyordu. Yanıt, dize okumak için nesne gibi bir dosya nasıl yapılacağını anlamaya çalışırken geldi. çözüm:

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

Bu Whitespace programlama gibi neredeyse kadar eğlenceliydi.

İlgili konular