flake8: F821 неопределенное имя для глобальной переменной - PullRequest
1 голос
/ 30 мая 2019

Я отредактировал свой скрипт, чтобы удалить все предупреждения flake8, кроме одного:

/tmp/flake8.tempfile.py:535:26: F821 undefined name 'salt'

/tmp/flake8.tempfile.py:536:29: F821 undefined name 'salt'

/tmp/flake8.tempfile.py:554:22: F821 undefined name 'salt'

/tmp/flake8.tempfile.py:602:21: F821 undefined name 'salt'

/tmp/flake8.tempfile.py:602:32: F821 undefined name 'salt'

/tmp/flake8.tempfile.py:609:21: F821 undefined name 'salt'

/tmp/flake8.tempfile.py:609:32: F821 undefined name 'salt'

/tmp/flake8.tempfile.py:623:44: F821 undefined name 'salt'

/tmp/flake8.tempfile.py:646:39: F821 undefined name 'salt'

/tmp/flake8.tempfile.py:651:39: F821 undefined name 'salt'

/tmp/flake8.tempfile.py:654:39: F821 undefined name 'salt'

...

соль - объект хешлиба, который используется многими функциями. Он определяется в основном разделе скрипта (внизу) строкой:

salt = hashlib.sha512() 

Перед обновлением с данными. Все остальные мои глобальные переменные работают нормально, поэтому я не знаю, почему этот делает flake8 отслаиваться.

Ответы [ 2 ]

0 голосов
/ 31 мая 2019

Я завернул весь основной раздел файла в:

if __name__ == "__main__":

и проблема волшебным образом исчезла. Нет объяснения, почему, но, по крайней мере, это может когда-нибудь помочь кому-то с этой же проблемой.

0 голосов
/ 30 мая 2019

Если у вас есть файл, такой как

# file_a.py
import hashlib

def my_func():

   ...

   if salt == ... :
      ...

if __name__ == '__main__':
    salt = hashlib.sha512() 
    my_func()

тогда он будет работать нормально при вызове python file_a.py, но средства проверки синтаксиса будут выдавать предупреждения, потому что есть вероятность, что salt может быть не определено.

Например, если вы создаете другой файл в той же папке, как

# file_b.py
from file_a import my_func()

тогда вы получите salt, который не будет определен, поскольку часть внутри if __name__ == '__main__': не будет вызвана, потому что file_a.py не является "основным" файлом.

если вы хотите определить константу, то вам нужно определить ее снаружи - предпочтительно в верхней части файла:

# file_a.py
import hashlib

SALT = hashlib.sha512() 

def my_func():

   ...

   if SALT == ... :
      ...

if __name__ == '__main__':
    my_func()

но, скорее всего, было бы лучше избегать констант и использовать вместо них ключевые аргументы.

Я надеюсь, что это то, что происходит. Если я полностью выключен, тогда я приношу свои извинения, но вам нужно будет предоставить больше кода в этом случае, это очень похожая игра:)

...