全局变量赋值的Python语法警告

2024-04-20 10:48:13 发布

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

类似的问题已经被提出和回答,但没有一个涉及这个具体问题。在

global EXAMPLE_GLOBAL
EXAMPLE_GLOBAL = True


def Setup():
    if EXAMPLE_GLOBAL:
        try:
            #Doing some file io here
        except:
            global EXAMPLE_GLOBAL
            EXAMPLE_GLOBAL = False

当运行这段代码(不是这段代码,这只是简单地划分为基本逻辑)时,我得到:

SyntaxWarning: name 'EXAMPLE_GLOBAL' is used prior to global declaration global EXAMPLE_GLOBAL

我的印象是,要更改全局变量的值,必须首先指定在转到新范围时引用的是全局变量。我是否需要第二个“global EXAMPLE_global”才能对全局进行更改,还是使用了相同的标识符?在


Tags: 代码iotrueifhereexampledefsetup
1条回答
网友
1楼 · 发布于 2024-04-20 10:48:13

I was under the impression that to change the value of a global variable you must first specify that you were referencing the global variable when you went to a new scope

是的,没错。但按照惯例,全球声明应该在这一范围开始时发表。换句话说,把它放在函数的顶部。在

EXAMPLE_GLOBAL = True

def Setup():
    global EXAMPLE_GLOBAL
    if EXAMPLE_GLOBAL:
        try:
            #Doing some file io here
        except:
            EXAMPLE_GLOBAL = False

documentation显式建议不要在全局语句中使用块中的名称之前引用它:

Names listed in a global statement must not be used in the same code block textually preceding that global statement.

在CPython中,违反此原则只会产生警告而不是错误,因为解析器忽略了块中全局指令的特定位置,但这是实现细节,将来可能会更改。在

(还要注意,您不需要在第一行使用global语句。顶级作用域中的每个名称在该作用域中都已经是全局的。)

相关问题 更多 >