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

Why does sys.exit() not ignore global argument?

所以我在 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() 之后的代码,它是显示以下警告消息

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

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

有没有更聪明的退出程序的方法?我试过 os._exit ()exit()quit()、none 都可以。

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

提前致谢!

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


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

它是一个编译器指令,并不是一个真正的语句;您不能在执行函数体的过程中中途更改变量的性质。无论 global 语句可能出现在何处,名称对于整个范围都是局部的或全局的。

尽管如此,即使您在全局范围内使用 global,它也不会在您已经分配给名称后发生,不是出于任何语义原因,而是解析器没有理由处理它不同只是因为你(不必要地)在全球范围内使用它。