python variabile locale referenziata prima dell’assegnazione

Quando inizi a introdurre funzioni nel codice, prima o poi incontrerai un UnboundLocalError. Questo errore viene generato quando si tenta di utilizzare una variabile prima che sia stata assegnata nel contesto locale.

In questa guida, parliamo di cosa significa questo errore e perché viene sollevato. Esaminiamo un esempio di questo errore in azione per aiutarti a capire come risolverlo.

Cos’è UnboundLocalError: variabile locale referenziata prima dell’assegnazione?

Il tentativo di assegnare un valore a una variabile che non ha un ambito locale può causare questo errore:

Python ha una semplice regola per determinare l’ambito di una variabile. Se viene assegnata una variabile in una funzione, quella variabile è locale. Questo perché si presume che quando si definisce una variabile all’interno di una funzione è necessario accedervi solo all’interno di tale funzione.

Ci sono due ambiti variabili in Python: locale e globale. Le variabili globali sono accessibili attraverso un intero programma; le variabili locali sono accessibili solo all’interno della funzione in cui sono state originariamente definite.

Diamo un’occhiata a come risolvere questo errore.

Uno scenario di esempio

Scriveremo un programma che calcoli il voto che uno studente ha ottenuto in classe.

Inizieremo dichiarando due variabili:

L’81% dei partecipanti ha dichiarato di sentirsi più sicuro delle proprie prospettive di lavoro nel settore tecnologico dopo aver frequentato un bootcamp. Fatti abbinare a un bootcamp oggi.

Il laureato medio del bootcamp ha trascorso meno di sei mesi nella transizione di carriera, dall’avvio di un bootcamp alla ricerca del primo lavoro.

Queste variabili memorizzano il numero e voti letterali che uno studente ha guadagnato, rispettivamente. Per impostazione predefinita, il valore di "lettera" è "F". Successivamente, scriviamo una funzione che calcola il voto in lettere di uno studente in base al voto numerico utilizzando un "if" istruzione:

Infine, chiamiamo la nostra funzione:

Questa riga di codice stampa il valore restituito dalla funzione calculate_grade() sulla console. Passiamo attraverso un parametro nella nostra funzione: numerico. Questo è il valore numerico del voto ottenuto da uno studente.

Eseguiamo il nostro codice e vediamo cosa succede:

è stato rilevato un errore.

La soluzione

Il nostro codice restituisce un errore perché facciamo riferimento a "lettera" prima di assegnarla.

Abbiamo impostato il valore di "numerico" su 42. La nostra istruzione if non lo fa imposta un valore per qualsiasi voto superiore a 50. Ciò significa che quando chiamiamo la nostra funzione calculate_grade(), la nostra istruzione return non conosce il valore a cui ci riferiamo.

Lo facciamo definire "lettera" all’inizio del nostro programma. Tuttavia, lo definiamo nel contesto globale. Python tratta la "lettera di ritorno" come il tentativo di restituire una variabile locale chiamata "lettera", non una variabile globale.

Risolviamo questo problema in due modi. Innanzitutto, possiamo aggiungere un’istruzione else al nostro codice. Ciò garantisce che dichiariamo "lettera" prima di provare a restituirlo:

Proviamo a eseguire nuovamente il nostro codice:

Il nostro codice stampa con successo il voto dello studente.

Se stai usando un "se" dove dichiari una variabile, dovresti assicurarti che ci sia un "else" dichiarazione in essere. Ciò assicurerà che anche se nessuna delle tue istruzioni if ‚Äã‚Äãrestituisce True, puoi comunque impostare un valore per la variabile con cui lavorerai.

In alternativa, potremmo usare il "globale" parola chiave per rendere la nostra parola chiave globale disponibile nel contesto locale nella nostra funzione calculate_grade(). Tuttavia, è probabile che questo approccio porti a codice più confuso e ad altri problemi. In generale, le variabili non devono essere dichiarate utilizzando "globale" a meno che non sia assolutamente necessario. Il tuo primo e principale punto di riferimento dovrebbe sempre essere quello di assicurarti che una variabile sia definita correttamente.

Nell’esempio sopra, ad esempio, non abbiamo verificato che la variabile "lettera" sia stata definita in tutti i casi d’uso.

Ecco! Abbiamo corretto l’errore della variabile locale nel nostro codice.

Conclusione

UnboundLocalError: variabile locale a cui si fa riferimento prima che venga generato l’errore di assegnazione quando si tenta di assegnare un valore a una variabile locale prima che sia stata dichiarata. Puoi risolvere questo errore assicurandoti che una variabile locale sia dichiarata prima di assegnarle un valore.

Ora sei pronto per risolvere UnboundLocalError Python errori come uno sviluppatore professionista!