2012-08-22 3 views
1

글로벌 파일이 정의 된 위치를 확인하려고합니다. 변수가없는 선언 또는되었는지 확인하는 방법은글로벌 이름이 정의되지 않았습니다.

NameError: global name 'my_logger' is not defined 

없을까 :이 프로그램을 실행할 때

import os, sys, logging... 

global my_logger 

def init(): 
    if my_logger is None: 
    print 'Logger needs to be initialized' 

그러나, 나는 오류가? 수표를 발행하기 전에 전역 변수를 초기화해야합니까? 당신이 전역 변수를 참조 할 필요가있을 때

+0

당신이'global'를 사용하는 경우, 당신이 가장 가능성이 잘못하고 있습니다. – dav1d

답변

3

당신은 global 키워드를 사용하지를 올바르게, 그것에 관한 문서를 찾아보십시오. 일반적으로

은, 그러나, 당신은 전역 변수가과 같이 정의되어 있는지 여부를 테스트 할 수 있습니다

defined = 'my_logger' in globals() 
if defined: 
    print('my_logger has not been defined') 
+0

대단히 감사합니다. – Nupur

3

당신은 global 키워드를 사용하여, 당신은 그것을 정의 할 때 다른 답변이 언급 한 바와 같이

import os, sys, logging... 

my_logger = None 

def init(): 
    global my_logger 
    if my_logger is None: 
    print 'Logger needs to be initialized' 
+3

my_logger가 수정되지 않았기 때문에,이 코드는'global my_logger' 라인 없이도 똑같이 작동합니다. – DSM

+3

실제로, 전역 변수에 액세스하는 데 필요하지는 않습니다. – kindall

+0

대단히 감사합니다. – Nupur

4

, 글로벌 키워드가 전역 변수의 액세스에 필요하지 선언문에. 하나는 당신이 아무것도를 지정하려는 경우에만 global으로 변수를 선언 할 필요가 있음을 유의하십시오 - 전역 키워드를 사용하지 않고 더 높은 범위에서 변수를 읽을 수 있습니다

my_logger = None 

def init_logger(): 
    #needs to use global because we assign to the variable 
    global my_logger 
    my_logger = MyLogger() 

def someOtherFunction(): 
    #no need to use global as we only access the logger 
    if my_logger: 
     my_logger.info("i can has logger") 
    else: 
     print 'logger not initialized' 
관련 문제