2012-12-10 12 views

risposta

10

si sta assegnando ad una variabile globale, il che significa che è necessario marchio come un globale:

def somefunction(): 
    global url_request 
    url_request+=1 

Quando si assegna ad una variabile in un ambito locale, si presume di essere un locale variabile a meno che non si usi una proposizione global per dire altrimenti a python.

+0

Non lo sapevo. Grazie mille. – user1561108

+0

Non pensavo nemmeno per un secondo che '+ =' stava facendo un compito. –

4

Per Python 2.7 dobbiamo tipi di variabili: globali, locali. Ogni funzione crea il proprio ambito locale per le variabili.

Dall'ambito locale è possibile leggere senza alcuna restrizione. È anche possibile chiamare chiamata metodi globali, quindi è possibile modificare la variabile da globale. Ma non puoi riassegnare il valore.

Guardate questo codice:

requests = [1,2,3] 

def modify(): 
    requests.append(4) 

def redeclare(): 
    requests = [10,20,30] 

modify() 
print requests 
# will give you [1,2,3,4] 

redeclare() 
print requests 
# will give you [1,2,3,4] 

Cosa sta succedendo? Non è possibile riassegnare la variabile requests dall'ambito locale, quindi l'interprete crea per te l'altra variabile, in ambito locale per il contesto di chiamata redeclare.

Riguardo al codice ... In primo luogo, si tenta di riassegnare la variabile dall'ambito globale. Perché? url_request è int, int, è immutabile, quindi l'operazione url_request+=1 non è cambia valore, dovrebbe riassegnare il nuovo valore al nome della variabile. In secondo luogo, non si specifica global identificativo per questa variabile. Quindi una sola opzione per l'interprete - per assumere url_request come variabile locale. Ma ... Non hai dichiarato il valore da nessuna parte ...

UnboundLocalError significa che si tenta di eseguire operazioni con valore variabile senza dichiararlo prima. Spero che questo ti aiuti a capire di più sulle variabili/nomi/ambiti Python.

Problemi correlati