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

时间:2017-09-28 13:25:21

标签: python syntax warnings global

已经提出并回答了与此类似的问题,但没有一个涉及这个具体问题。

global EXAMPLE_GLOBAL
EXAMPLE_GLOBAL = True


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

运行此代码时(完全不是这段代码,这只是基本逻辑。)我得到:

  

语法警告:名称'EXAMPLE_GLOBAL'在全局声明之前使用   全局EXAMPLE_GLOBAL

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

1 个答案:

答案 0 :(得分:2)

  

我的印象是,要更改全局变量的值,您必须首先指定在转到新范围时引用全局变量

是的,没错。但传统上,全球声明应该在该范围的开头。换句话说,把它放在你的功能的顶部。

EXAMPLE_GLOBAL = True

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

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

  

全局语句中列出的名称不得在文本上位于该全局语句之前的相同代码块中使用。

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

(另请注意,第一行上不需要global语句。顶级范围内的每个名称在该范围内已经是有效的全局名称。)