【发布时间】:2013-10-21 08:22:21
【问题描述】:
给定一个简单的代码,如下所示:
def func(flag):
if flag:
seq = range(3)
return seq[1]
pep8 和 flake8 都认为这段代码不错。为什么会发生这种情况? seq 仅在 if 子句下定义。
【问题讨论】:
-
pep8 和 flake8 并不是真正的代码分析器,它们更像是样式检查器。
-
seq可以在函数外部定义。 -
@Fabian:不,它不能 -
UnboundLocalError: local variable 'seq' referenced before assignment -
为此您需要一个更复杂的分析器。 PyCharm 检测到这个可能的错误。
-
@Fabian:现在尝试在函数中对
foo进行不可访问的赋值,这就是导致foo成为局部变量的原因