为什么sys.exit()不忽略全局参数?

时间:2019-02-26 17:30:23

标签: python global-variables exit sys

所以我在Python中有这段代码,在其中定义了一些global变量并在不同部分使用了它们

def compute_sigma(mellin, alpha_power, beta_power, input_path, qr_epsilon):
    global tf
    ...
    return taus, error_mellin, error_factorization

## first part
global tf
tf = ...
...
taus, error_mellin, error_factorization = compute_sigma(...)
sys.exit()
## second part
global tf ## where the warning is generated
tf = ...
...
taus, error_mellin, error_factorization = compute_sigma(...)

我试图通过退出sys.exit()所在的程序来执行第一部分,但是似乎Python并没有完全忽略sys.exit()之后的代码,它显示了以下警告消息< / p>

verification.py:257: SyntaxWarning: name 'tf' is assigned to before global declaration

第257行是最后一个global定义所在的位置。

退出该程序是否有更聪明的方法?我尝试了os._exit ()exit()quit(),但它们都不起作用。

另外,如果您需要重现警告,请告诉我,我可以提供一个玩具功能供您测试。

谢谢!

1 个答案:

答案 0 :(得分:2)

TL; DR请勿在全局级别使用global;它在那里没有任何作用,并且使解析器发疯。


global仅在函数内部具有实际含义,因为这是对编译器的指令,列出的名称引用的是全局范围内的对象,而不是当前范围内的局部变量。

这是一个编译器指令,不是真正的语句;您不能在执行函数主体的过程中更改变量的性质。在整个作用域中,名称可以是本地名称,也可以是全局名称,无论global语句可能出现在何处。

尽管如此,即使您在全局范围内使用global,在分配给该名称之后也不会发生这种情况,由于语义上的原因并没有那么多,但是没有理由让解析器将其区别对待仅仅是因为您(不必要)在全局范围内使用了它。