La variable Python asignada por un módulo externo es accesible para imprimir pero no para asignación en el módulo objetivo
Pregunta
Tengo dos archivos, uno está en webroot y otro es un bootstrap ubicado en una carpeta sobre la raíz web (esto es, por cierto, la programación CGI).
El archivo de índice en la raíz web importa la rutina de arranque y le asigna una variable, luego llama a una función para inicializar la aplicación. Todo hasta aquí funciona como se esperaba.
Ahora, en el archivo de arranque, puedo imprimir la variable, pero cuando intento asignar un valor a la variable, se produce un error. Si quitas la declaración de asignación, no se arrojan errores.
Tengo mucha curiosidad acerca de cómo funciona el alcance en esta situación. Puedo imprimir la variable, pero no puedo asignarla. Esto está en 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)
Gracias.
Editar: El mensaje de error
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>
Solución
prueba esto:
def initialize():
global VAR
print('Content-type: text/html\n\n')
print(VAR)
VAR = 'h'
print(VAR)
Sin el 'VAR global', python quiere usar el VAR de la variable local y le da " UnboundLocalError: variable local 'VAR' referenciada antes de la asignación "
Otros consejos
No lo declare global, páselo y devuélvalo si necesita tener un nuevo valor, como este:
def initialize(a):
print('Content-type: text/html\n\n')
print a
return 'h'
----
import bootstrap
b = bootstrap.initialize('testVar')