[Python] With... as... per sopprimere NameError

Pietro Battiston me a pietrobattiston.it
Mar 14 Maggio 2013 15:55:31 CEST


Il giorno mar, 14/05/2013 alle 14.49 +0200, Marco Giusti ha scritto:
> On Tue, May 14, 2013 at 02:27:19PM +0200, Pietro Battiston wrote:
> > Il giorno mar, 14/05/2013 alle 13.52 +0200, Marco Giusti ha scritto:
> > > On Tue, May 14, 2013 at 01:32:40PM +0200, Pietro Battiston wrote:
> > > > Avevo anche pensato che __enter__ potrebbe installare un sys.excepthook
> > > > modificato che cattura le NameErrorException (e __exit__ ripristinare
> > > > quello originale)... ma un conto è catturarle, un altro fornirle al
> > > > codice l'oggetto relativo e farlo proseguire normalmente...
> > > 
> > > premetto che non mi è chiarissimo perché tu voglia installare
> > > sys.excepthook, ma un context manager può gestire solo il codice
> > > all'interno del contesto stesso:
> > > 
> > > 	with context(..):
> > > 		do_stuff()  # <- questo e' gestito
> > > 	do_stuff_again()  # <- questo no, se NameError e' generata, __exit__
> > > 	                  # non può fare niente
> > > 
> > 
> > Ma è esattamente quello che voglio! L'esempio che ho scritto io se
> > eseguito _fa_ esattamente quello che voglio... il problema è che non
> > funziona se utilizzato invece in una funzione.
> > 
> > N.B: sì, NameError, non NameErrorException, sorry.
> 
> scusa ma ancora non capisco bene, ho semplicemente aggiunto le seguenti
> righe alla fine del tuo codice:
> 
> 	def foo():
> 		print a
> 		with TuDimmiCosaVuoiCheCiPensoIo( {"a" : "ciao"} ):
> 			print a
> 
> 		print a
> 
> 	foo()
> 
> e lanciandolo:
> 
> 	non ti sto mica salutando
> 	ciao
> 	non ti sto mica salutando
> 	non ti sto mica salutando
> 	ciao
> 	non ti sto mica salutando
> 
> cosa dovrebbe stampare invece?


Va bene così infatti... finché non sposti anche il

a = "non ti sto mica salutando"

_dentro_ la funzione (all'inizio)...

ciao

Pietro



Maggiori informazioni sulla lista Python