为什么 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
,它也不会在您已经分配给名称后发生,不是出于任何语义原因,而是解析器没有理由处理它不同只是因为你(不必要地)在全球范围内使用它。
所以我在 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
,它也不会在您已经分配给名称后发生,不是出于任何语义原因,而是解析器没有理由处理它不同只是因为你(不必要地)在全球范围内使用它。