[Python] C'e' un modo per abbreviare questa sintassi?

orsomannaro orsomannaro a gmail.com
Mer 7 Nov 2012 18:36:55 CET


Il 07/11/2012 15:17, Nicola Larosa ha scritto:

>>> numero1 = str2int(get_num(...))
>>> numero2 = str2int(get_num(...))
>>> numero3 = str2int(get_num(...))
>>> ...
>>> if numero1 and numero2 and numero3 and ...:
>>>          my_obj.codice1 = numero1
>>>          my_obj.codice2 = numero2
>>>          my_obj.codice3 = numero3


Credo di non aver presentato bene il problema tralasciando qualche 
informazione ....

Devo inserire dati letti da un file in un model di Django

In base ai parametri passati, get_num() mi ritorna un pezzo della 
stringa letta dal file, che devo eventualmente convertire in numero e 
assegnare a un campo del model.

Alcuni campi del model sono obbligatori (quelli che verifico non siano 
Null) mentre altri campi posso anche essere Null

Inoltre sto usando il metodo "bulk_create" di Django seguendo questo:
http://www.caktusgroup.com/blog/2011/09/20/bulk-inserts-django/
per tanto stocco un po' di oggetti in una lista e poi li salvo in blocco.

Quindi:

- il controllo non posso farlo su get_num perche' in alcuni casi Null 
puo' anche andar bene

- a quanto pare se assegno Null a un campo che non puo' esserlo, me ne 
accorgo solo quando cerco di salvare su database, quindi non servirebbe:

try:
   my_obj.codice1 = str2int(get_num(...))
   my_obj.codice2 = str2int(get_num(...))
   my_obj.codice3 = str2int(get_num(...))
except:
   continue

perche' mi accorgerei di aver assegnato un valore scorretto solo dopo 
aver elaborato e star salvando centinaia di oggetti.


Quindi per ora il metodo che sto usando mi risulta l'unica soluzione.




Maggiori informazioni sulla lista Python