[Python] Caccia al bug, UnboundLocalError
Marco Giusti
marco.giusti a gmail.com
Lun 15 Apr 2013 18:26:16 CEST
On Mon, Apr 15, 2013 at 05:50:33PM +0200, Adriano Barbieri wrote:
>> Ma di quale linguaggio stai parlando? Non di Python e non di
>> UnboundLocalError.
>
> Come?
> E' perché ho detto definizione al posto di funzione... e un po' di
> elasticità sù daii :)
> Dopotutto def non è sinonimo di definizione di funzione?
> Scusa ma provvengo ancora dalla programmazione di Amiga con AMOS
> Pro... da molto molto tempo, il Python è pochi mesi che lo mastico e
> mi sono iscritto a questa lista col desiderio di apprendere qualche
> nozione di programmazione in Python, ma fin'oranessuno si è degnato
> a rispondere a un paio di miei quesiti.
> Senza polemizzare, in questa lista mi pare qualcuno abbia una
> esperienza decennale con questo linguaggio, ma forse si sente troppo
> superiore a sto principiante da neanche deniarlo di una risposta.
no, perché quello che hai detto è sbagliato. python è un linguaggio
fortemente e dinamicante tipato. lasciando stare i sofismi, questo vuol
dire che se hai una variabile che è un intero che si chiama `my_i` non
vuol dire che `my_i` è correllata in maniera stretta con variabili di
tipo intero. infatti in python hai oggetti e riferimenti agli oggetti.
`my_i` è un nome del riferimento ma tu puoi fare il binding del nome
`my_i` ad un oggetto di tipo completamente differente. es:
>>> my_i = 42
>>> i = my_i
>>> i is my_i
True
>>> my_i = "quarantadue"
>>> i is my_i
False
>>>
alla linea 3 si la seguente situazione:
nomi | oggetti
|
my_i -----> 42
| ^
i ----------|
|
alla linea 5 la situazione cambia:
nomi | oggetti
|
my_i -----> 42
|
i --------> "quarantadue"
|
chi ha il libro di martelli questo è ottimamente spiegato.. da qualche
parte, ora non l'ho sotto mano.
> UnboudLocalError: Local variable 'x1' referenced before assignment.
>
> Dalla mia poca esperienza mi dice che è stata usata una variabile
> prima di essere definita e quello che ho suggerito mi è sembrato
> chiaro e terra terra...
non proprio:
Python 2.7.3rc2 (default, Apr 22 2012, 22:30:17)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined
>>>
come vedi l'errore è ben differente. Leggi il link che è stato postato
che è molto istruttivo.
ciao
m.
Maggiori informazioni sulla lista
Python