Переменная Python, назначенная внешним модулем, доступна для печати, но не для назначения в целевом модуле. - PullRequest
1 голос
/ 03 марта 2009

У меня есть два файла, один из них находится в webroot, а другой - в виде начальной загрузки, расположенной в одной папке над корневым каталогом (кстати, это 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>

Ответы [ 2 ]

3 голосов
/ 03 марта 2009

попробуйте это:


def initialize():
    global VAR
    print('Content-type: text/html\n\n')
    print(VAR)
    VAR = 'h'
    print(VAR)

Без 'global VAR' python хочет использовать локальную переменную VAR и выдает "UnboundLocalError: локальная переменная 'VAR', на которую ссылаются перед присваиванием"

0 голосов
/ 03 марта 2009

Не объявляйте его глобальным, передавайте его и возвращайте, если вам нужно новое значение, например:

def initialize(a):
    print('Content-type: text/html\n\n')
    print a
    return 'h'

----

import bootstrap
b = bootstrap.initialize('testVar')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...