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

Marco Giusti marco.giusti a gmail.com
Mar 14 Maggio 2013 14:49:53 CEST


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?

ciao
m.


Maggiori informazioni sulla lista Python