一个(可能的)Python范围问题

2024-04-23 18:16:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我不能提供我的实际代码(因为它超过一万行),但我可以给出一个简短的总结。在这里,我稍后给出症状:

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”这样的话,它仍然没有任何作用

我很肯定这是一个范围的问题,但我不确定

如果你需要我提供更多的代码,尽管问。当你找到答案时,请解释它为什么起作用。谢谢你


Tags: of代码event症状信息ifdefsome
1条回答
网友
1楼 · 发布于 2024-04-23 18:16:23

您还需要在exec语句中使用global,因为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,它将打印:

10
11
10

相关问题 更多 >