Переменная Python, назначенная внешним модулем, доступна для печати, но не для назначения в целевом модуле.
Вопрос
У меня есть два файла: один находится в корневом каталоге веб-сайта, а другой представляет собой загрузочную папку, расположенную на одну папку выше корневого каталога веб-сайта (кстати, это программирование CGI).
Индексный файл в корневом каталоге сети импортирует загрузочный файл и присваивает ему переменную, а затем вызывает функцию для инициализации приложения.Все до сих пор работает так, как ожидалось.
Теперь в файле начальной загрузки я могу напечатать переменную, но когда я пытаюсь присвоить значение переменной, выдается ошибка.Если вы удалите оператор присваивания, никаких ошибок не возникнет.
Мне действительно любопытно, как работает обзор в этой ситуации.Я могу распечатать переменную, но не могу ей присвоить.Это на 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)
Спасибо.
Редактировать:Сообщение об ошибке
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>
Решение
попробуй это:
def initialize():
global VAR
print('Content-type: text/html\n\n')
print(VAR)
VAR = 'h'
print(VAR)
Без «глобального VAR» Python хочет использовать локальную переменную VAR и выдает «UnboundLocalError:локальная переменная 'VAR', на которую ссылаются перед присвоением"
Другие советы
Не объявляйте его глобальным, вместо этого передайте его и верните, если вам нужно новое значение, например:
def initialize(a):
print('Content-type: text/html\n\n')
print a
return 'h'
----
import bootstrap
b = bootstrap.initialize('testVar')