[Python] Problema di scope, o bug?

Andrea Gasparini gaspa a yattaweb.it
Sab 30 Ago 2008 22:58:02 CEST


Ciao!
Qualcuno mi spiega come e' possibile che questo script:

 1 #!/usr/bin/python
 2 import sys
 3 import getopt
 4 
 5 quiet = False
 6 
 7 def main():
 8     print quiet
 9     optlist, args = getopt.getopt(sys.argv[1:], 'q', ['--quiet'])
10 
11     for o,a in optlist:
12         if o in ('-q','--quiet'):
13             quiet=True
14 
15 if __name__ == "__main__":
16     main()

Mi dia questo errore:
$ python scope.py 
Traceback (most recent call last):
  File "scope.py", line 16, in <module>
    main()
  File "scope.py", line 8, in main
    print quiet
UnboundLocalError: local variable 'quiet' referenced before assignment

????

quiet e' dichiarato come variabile del modulo, e quindi python dovrebbe 
andarsi a cercare anche quel valore... ma la cosa piu' strana e' che 
togliento il "for o,a in optlist:" tutto funziona alla perfezione:

 1 #!/usr/bin/python
 2 import sys
 3 import getopt
 4 
 5 quiet = False
 6 
 7 def main():
 8     print quiet
 9     optlist, args = getopt.getopt(sys.argv[1:], 'q', ['--quiet'])
10 
11 if __name__ == "__main__":
12     main()

$ python scope.py 
False

Non posso neanche pensare che il for faccia cose strane, visto che neanche 
ci arriva... allora potrei pensare a namespace pollution... ma al limite 
dovrebbe cambiare valore a qualcosa, non darmi Unbound.

Insomma, qualche idea??
( a parte "ma non hai altro da fare il sabato sera?" :D )
bye!
-- 
-gaspa-
-----------------------------------------------
--------- http://launchpad.net/~gaspa ---------
------ HomePage: iogaspa.altervista.org -------
-Il lunedi'dell'arrampicatore: www.lunedi.org -


Maggiori informazioni sulla lista Python