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

Marco Giusti marco.giusti a gmail.com
Mar 14 Maggio 2013 13:52:08 CEST


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

però se NameError, e non NameErrorException, è generato all'interno del
contesto, tu nell'__exit__ puoi sopprimere l'eccezione, basta ritornare
un valore che sia valutato logicamente vero:

	def __exit__(self, exc_type, exc_value, traceback):
		if isinstance(exc_type, NameError):
			return True
		# di default ritorna None che è valutato falso e l'eccezione e'
		# propagata


> ¹ Per chi si stesse preoccupando per la mia mente malata: voglio potere
> scrivere codice che lavora sulle colonne di pandas.DataFrame riferendomi
> direttamente alle colonne con il loro nome, e magari stabilendo un
> filtering su una condizione prefissata, semplificando _enormemente_ il
> codice delle analisi econometriche che sviluppo con pandas/statsmodels.

non saprei non conosco pandas. se posti del codice come è ora e come
vorresti che sia forse qualche aiuto in più posso dartelo

ciao
m.


Maggiori informazioni sulla lista Python