외부 모듈에 의해 할당 된 파이썬 변수 인쇄에 액세스 할 수 있지만 대상 모듈에서 할당되지는 않습니다.

StackOverflow https://stackoverflow.com/questions/605399

  •  03-07-2019
  •  | 
  •  

문제

두 개의 파일이 있는데, 하나는 webroot에 있고, 다른 하나는 웹 루트 위의 한 폴더에 위치한 부트 스트랩입니다 (이것은 CGI 프로그래밍입니다).

웹 루트의 인덱스 파일은 부트 스트랩을 가져 와서 변수를 할당 한 다음 AA 함수를 호출하여 응용 프로그램을 초기화합니다. 여기까지 모든 것이 예상대로 작동합니다.

이제 부트 스트랩 파일에서 변수를 인쇄 할 수 있지만 변수에 값을 할당하려고하면 오류가 발생됩니다. 과제 명세서를 제거하면 오류가 발생하지 않습니다.

이 상황에서 범위가 어떻게 작동하는지 정말 궁금합니다. 변수를 인쇄 할 수 있지만 서명 할 수는 없습니다. 이것은 파이썬 3에 있습니다.

색인 .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)

'Global 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')
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top