On Sat, Nov 13, 2010 at 11:45:37AM +0100, lex mlist wrote: > Giorno, > > torno alla carica con un'altro problema (e chiedo scusa se vi stresso).
no problem [...] > in test_1 invece semplicemente all' if __name__ == "__main__": chiamo prima > la classe Application specificando il nome del file di configurazione, e poi > provo a chiamare la funzione Error ma risulta sempre falsa. > Provando a stampare con un print il dizionario (come si vede nella classe > Application) il dizionario fornisce tali coppie ti chiave valore. > A me sembra che il file errors.py utilizzi il dizionario prima della > modifica della classe Application. > > Cosa sbaglio esattamente? riporto qui il codice per semplicità import yaml from sys import exit configuration = dict() class Application(object): def __init__(self, filename): self.filename = filename def setup(self): try: global configuration # <<< here the trick configuration = yaml.load(open(self.filename)) except IOError: exit('configuration file not found: %s' % self.filename) print(configuration) ``configuration`` fa parte dello scope globale, quando dentro la funzione setup tu fai l'assegnamento configuration = yaml.load(open(self.filename)) tu leghi (bind) il nome configuration allo scope locale. quando da dentro la funzione cerchi il nome ``configuration``, lui lo trova nello scope locale e ritorna quello, ovvero i parametri di configurazione, ma dal modulo ``error`` tu ottieni la variabile che è associata allo scope globale. un piccolo extra che puoi ignorare se credi. python mette a disposizione una variabile globale, ``__debug__``, che è sempre vera a meno di eseguire l'interprete python con le opzioni di ottimizzazione, -O. in quel caso crea dei file con bytecode ottimizzato .pyo, invece dei classici .pyc, inoltre è interessante come viene ottimizzato il codice: import dis def error(msg): if __debug__: print msg error('exception...') dis.dis(error) prova a lanciare questo codice prima normalmente e poi con l'opzione -O. m. -- Cosa volete? Questo diavolo d'uomo ha sempre le tasche ripiene di argomenti irresistibili. -- Pierre Augustin Caron de Beaumarchais _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python