외부 모듈에 의해 할당 된 파이썬 변수 인쇄에 액세스 할 수 있지만 대상 모듈에서 할당되지는 않습니다.
문제
두 개의 파일이 있는데, 하나는 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')
제휴하지 않습니다 StackOverflow