我已经编辑了脚本,以删除除以下之一以外的所有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对象。它是在脚本的主要部分(在底部)中用以下行定义的:
salt = hashlib.sha512()
在更新数据之前。我所有其他全局变量都工作正常,所以我不知道为什么这个会使flake8掉落。
答案 0 :(得分:0)
如果您有
之类的文件# 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()
但最有可能的是,最好避免使用常量,而改用关键字参数。
我希望这是正在发生的事情。如果我完全不赞成,那么我表示歉意,但是在那种情况下,您将需要提供更多代码,这非常像一个猜谜游戏:)
答案 1 :(得分:0)
我将文件的整个主要部分包裹在一个
中:if __name__ == "__main__":
问题神奇地消失了。没有任何原因的解释,但是至少有一天这可能会帮助其他人解决同样的问题。