Почему sys.exit () не игнорирует глобальный аргумент? - PullRequest
0 голосов
/ 26 февраля 2019

Итак, у меня есть этот код на 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(), ни один из них не сработал.

Также, пожалуйста, дайте мне знать, если вам нужно воспроизвести предупреждение, я могу сделать игрушечную функцию для вас, чтобы проверить.

Заранее спасибо!

1 Ответ

0 голосов
/ 26 февраля 2019

TL; DR Не используйте global на глобальном уровне;это не служит никакой цели, и это сводит синтаксический анализатор.


global имеет реальное значение только внутри функции, поскольку это инструкция для компилятора, к которой относятся перечисленные именаобъекты в глобальной области видимости, а не локальные переменные в текущей области.

Это директива компилятора, а не истинное утверждение;Вы не можете изменить природу переменной на полпути через выполнение тела функции.Имя является локальным или глобальным для всей области, независимо от того, где может произойти оператор global.

Тем не менее, даже если вы используете global в глобальной области, это не может произойти после того, как вы ужеприсваивается имени, не столько по какой-либо семантической причине, но у синтаксического анализатора нет оснований рассматривать его по-другому только потому, что вы (без необходимости) использовали его в глобальной области видимости.

...