Переменная Python, назначенная внешним модулем, доступна для печати, но не для назначения в целевом модуле.

1

У меня есть два файла: один из них находится в веб-корне, а другой - загрузочный блок, расположенный в одной папке над корнем веб-сайта (кстати, это программирование CGI).

Индексный файл в корневом каталоге сети импортирует загрузочный файл и назначает ему переменную, а затем вызывает функцию для инициализации приложения. Все, что здесь работает, как и ожидалось.

Теперь, в файле bootstrap, я могу распечатать переменную, но когда я пытаюсь присвоить значение переменной, возникает ошибка. Если вы уберете оператор присваивания, ошибки не будут выброшены.

Мне действительно интересно, как работает обзор в этой ситуации. Я могу напечатать переменную, но я не могу ее использовать. Это находится на 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>
  • 0
    Может помочь опубликовать ваше сообщение об ошибке.
  • 0
    И ваши отступы отображаются в вашем списке bootstrap.py.
Показать ещё 1 комментарий
Теги:
scoping

2 ответа

3
Лучший ответ

попробуйте следующее:


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

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

  • 0
    Спасибо, ваш пост указал мне правильное направление. Дополнительную информацию можно найти здесь. stackoverflow.com/questions/370357/...
0

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

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

----

import bootstrap
b = bootstrap.initialize('testVar')
  • 0
    Да, это обойдет проблему определения объема работ, и я использую этот метод в других ситуациях; но в этой ситуации файл index.py не должен выполнять какую-либо обработку, он должен только установить несколько значений. Загрузчик фактически отвечает за загрузку другого класса, который выполняет обработку

Ещё вопросы

Сообщество Overcoder
Наверх
Меню