2011-03-01 32 views
1

我是非常,非常混乱......的Python:全局变量从职能范围内+诅咒

基本上是试图声明一个全局变量指向一个诅咒窗口,这样我可以使用debug命令但它抱怨AttributeError: 'NoneType' object has no attribute 'addstr'这意味着它没有被设置?请帮忙!

wDebug = None 

def start(stdscr): 
    curses.nocbreak() 
    curses.echo() 
    screenSize = stdscr.getmaxyx() 

    wDebug = curses.newwin(5, screenSize[1], 0, 0); 

    curses.init_pair(1, curses.COLOR_WHITE, curses.COLOR_BLUE) 

    wDebug.bkgd(curses.color_pair(1)) 
    wDebug.refresh() 

    /* Snip */ 

    awaitInput(wInput) 

    while 1: pass 

def awaitInput(window): 
    while 1: 
    msg = /* Snip */ 
    sendMessage(msg) 

def sendMessage(msg): 
    /* Snip */ 
    debug("Send message") 

def debug(msg): 
    wDebug.addstr(msg + "\n") 
    wDebug.refresh() 

非常感谢您的时间,

回答

1

您需要使用global statement

wDebug = None 

def start(stdscr): 
    global wDebug 
    #... 
    wDebug = curses.newwin(5, screenSize[1], 0, 0); 

从文档:

这将是不可能分配到全球变量无global

+0

呵呵,不知道你不得不在Python中这样做,noob错误,谢谢! – 2011-03-01 18:31:58

+0

如何从调试中访问全局变量? – 2011-03-01 18:39:01

+2

@Pez:在Python中,默认情况下变量被认为是本地的。当你访问一个在函数中没有赋值的变量时,Python将检查全局变量。但是,如果你赋值给任何变量,Python认为它必须是本地的,除非你另有明确的说明(即使这个名称是全局的)。像'def foo():x + = 10'这样的函数会引发一个UnboundLocalError,即使有一个叫做“x”的全局变量(注意错误的名称)。 – 2011-03-01 19:26:58