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. > 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 > Eh, ma io non voglio semplicemente che l'eccezione sia soppressa, ovvero che "print a" venga semplicemente saltato; bensì che "a" diventi quel che voglio io (e quindi in questo caso particolare venga stampato)... > > > ¹ 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 Allora: supponi che ci sia "df", un oggetto Dataframe, che contiene varie colonne (=variabili). Ora, supponi che "df" contenga una colonna "x" e una "y". Al momento per averne la somma devo fare df["x"] + df["y"] io voglio poter fare semplicemente x + y all'interno di un dato contesto ("with df.my_context(): ..."). (Finché non riesco a fare una cosa del genere, mi vergogno a mostrare il mio codice econometrico in Python ai miei colleghi, che utilizzano linguaggi più brutti ma ad hoc e quindi enormemente meno verbosi...) ciao Pietro _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python