(可能的)Python范围问题

时间:2016-12-10 01:19:19

标签: python python-2.7 scope pygame global-variables

我无法贡献我的实际代码(因为它超过一万行),但我可以简要总结一下。在这里,我稍后给出症状:

def calculate_stuffs():
    *global lots of stuff*
    *some other stuff*
    for event in pygame.event.get():
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_BACKSLASH:
                try:
                    exec easygui.enterbox('Type command:')
                except:
                    print "Command crashed, or Easygui is not installed."
    *a lot of other stuff*

以下是工作/失败时的一些示例:

  • 如果我输入的命令不起作用,则会返回相应的命令 消息。

  • 如果我告诉它运行一个函数,它就可以了。

  • 如果我告诉它读取变量(例如打印变量),它就可以了。

  • 如果我告诉它写一个变量,它就不会做任何事情。它 甚至没有给出崩溃的消息。我把x做成了一个全局变量, 如果我说" x + = 5"

  • ,它仍然无效

我很确定这是范围问题,但我不确定。

如果您需要我提供更多代码,请询问。当你找到答案时,请解释它的工作原理。谢谢!

1 个答案:

答案 0 :(得分:0)

您也需要在int pickOne; int pickTwo; int pickThree; int pickFour; int drawnOne; int drawnTwo; int drawnThree; int drawnFour; 语句中使用global,因为exec有自己的范围,如函数:

exec

将打印:

x = 10

def foo():
    global x
    command = 'global x; x += 1; print x'
    try:
        exec command
    except:
        print "error"

print x
foo()
print x

10 11 11 语句中没有global x,它会打印出来:

exec