Python 3.x flake8:F821全局变量的未定义名称

Python 3.x flake8:F821全局变量的未定义名称,python-3.x,pep8,flake8,Python 3.x,Pep8,Flake8,我已编辑脚本以删除除一个警告之外的所有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 unde

我已编辑脚本以删除除一个警告之外的所有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-ojbect,被许多函数使用。它在脚本的主要部分(底部)中定义,行为:

salt = hashlib.sha512() 

在使用数据更新之前。我的所有其他全局文件都工作正常,所以我不知道为什么这一个会使flake 8变小。

如果您有像

# file_a.py
import hashlib

def my_func():

   ...

   if salt == ... :
      ...

if __name__ == '__main__':
    salt = hashlib.sha512() 
    my_func()
然后在调用
python文件_a.py
时,它将正常运行,但语法检查器将抛出警告,因为可能没有定义
salt

例如,如果在同一文件夹中创建另一个文件,如

# file_b.py
from file_a import my_func()

如果uuu name uuu=='uuuu main uu':没有被调用,因为
file_a.py
不是“main”文件,那么您将不会被定义为
中的部分

如果要定义常数,则需要在外部定义它–最好在文件顶部:

# file_a.py
import hashlib

SALT = hashlib.sha512() 

def my_func():

   ...

   if SALT == ... :
      ...

if __name__ == '__main__':
    my_func()
但最有可能的是,最好避免使用常量,而是使用关键字参数


我希望这就是正在发生的事情。如果我完全退出了,那么我很抱歉,但是在这种情况下,您需要提供更多的代码,这是一个类似这样的猜测游戏:)

如果您有一个像

# file_a.py
import hashlib

def my_func():

   ...

   if salt == ... :
      ...

if __name__ == '__main__':
    salt = hashlib.sha512() 
    my_func()
然后在调用
python文件_a.py
时,它将正常运行,但语法检查器将抛出警告,因为可能没有定义
salt

例如,如果在同一文件夹中创建另一个文件,如

# file_b.py
from file_a import my_func()

如果uuu name uuu=='uuuu main uu':
没有被调用,因为
file_a.py
不是“main”文件,那么您将不会被定义为
中的部分

如果要定义常数,则需要在外部定义它–最好在文件顶部:

# file_a.py
import hashlib

SALT = hashlib.sha512() 

def my_func():

   ...

   if SALT == ... :
      ...

if __name__ == '__main__':
    my_func()
但最有可能的是,最好避免使用常量,而是使用关键字参数


我希望这就是正在发生的事情。如果我完全退出了,那么我很抱歉,但是在这种情况下,您需要提供更多的代码,这是一个类似这样的猜测游戏:)

我将文件的整个主要部分包装在一个:

if __name__ == "__main__":

问题神奇地消失了。没有解释原因,但至少有一天这可能会帮助其他人解决同样的问题。

我将文件的整个主要部分包装在一个:

if __name__ == "__main__":

问题神奇地消失了。没有解释为什么,但至少有一天这可能会帮助其他人解决同样的问题。

但是如果
中定义了
salt
,如果
并且您从另一个脚本导入了模块(这样
\uuuuuu main\uuuuuuu
-东西就不会被执行),有没有一个地方
salt
未定义?这不是一个模块。这是直接运行的主文件。我在下面的回答中解释了我猜测发生了什么。非常感谢您的回复,但我将整个主部分放在了“if name==“main”:“中,问题神奇地消失了。哦,好吧。但是如果
salt
是在
中定义的,如果
name\uuu=''uuuuu main\uuuuuu':
并且你从另一个脚本导入了你的模块(这样
\uu main\uuuuuuuu
-东西就不会被执行),会有一个地方
salt
是未定义的吗?这不是一个模块。这是直接运行的主文件。我在下面的回答中解释了我猜测发生了什么。非常感谢您的回复,但我将整个主部分放在了“if name==“main”:“中,问题神奇地消失了。哦,好吧。