La variabile Python assegnata da un modulo esterno è accessibile per la stampa ma non per l'assegnazione nel modulo di destinazione
Domanda
Ho due file, uno è nella webroot e un altro è un bootstrap situato una cartella sopra la radice web (questa è la programmazione CGI a proposito).
Il file indice nella radice Web importa il bootstrap e gli assegna una variabile, quindi chiama una funzione per inizializzare l'applicazione. Tutto fino a qui funziona come previsto.
Ora, nel file bootstrap posso stampare la variabile, ma quando provo ad assegnare un valore alla variabile viene generato un errore. Se porti via la dichiarazione di incarico non vengono generati errori.
Sono davvero curioso di sapere come funziona lo scoping in questa situazione. Posso stampare la variabile, ma non posso assegnarla. Questo è su Python 3.
index.py
# Import modules
import sys
import cgitb;
# Enable error reporting
cgitb.enable()
#cgitb.enable(display=0, logdir="/tmp")
# Add the application root to the include path
sys.path.append('path')
# Include the bootstrap
import bootstrap
bootstrap.VAR = 'testVar'
bootstrap.initialize()
bootstrap.py
def initialize():
print('Content-type: text/html\n\n')
print(VAR)
VAR = 'h'
print(VAR)
Grazie.
Modifica: il messaggio di errore
UnboundLocalError: local variable 'VAR' referenced before assignment
args = ("local variable 'VAR' referenced before assignment",)
with_traceback = <built-in method with_traceback of UnboundLocalError object at 0x00C6ACC0>
Soluzione
prova questo:
def initialize():
global VAR
print('Content-type: text/html\n\n')
print(VAR)
VAR = 'h'
print(VAR)
Senza 'VAR globale' Python desidera utilizzare la variabile locale VAR e darti "UnboundLocalError: variabile locale" VAR "a cui si fa riferimento prima dell'assegnazione "
Altri suggerimenti
Non dichiararlo globale, passalo invece e restituiscilo se devi avere un nuovo valore, come questo:
def initialize(a):
print('Content-type: text/html\n\n')
print a
return 'h'
----
import bootstrap
b = bootstrap.initialize('testVar')