【发布时间】:2018-10-18 17:24:03
【问题描述】:
我已阅读过有关此错误的信息,但问题是我认为我不应该在这里收到此错误,而且我从未见过有人遇到此问题。这是我的代码:
def substituie(caractere):
lista_optiuni = genereaza_lista_substitutii(caractere)
global sir
sir = sterge_lambda(sir)
while lista_optiuni != []:
index = randrange(0,len(lista_optiuni))
if len(sir) + len(lista_optiuni[index])-1 > 60:
lista_optiuni.remove(lista_optiuni[index])
else:
sir = sir.replace(caractere,lista_optiuni[index],1)
sir = sterge_lambda(sir)
return True
return False
问题在于我的变量“Sir”。我有一个名为“Sir”的外部变量,我希望我的函数在不将其作为参数传递的情况下更改它的某些方面。所以我在函数内将它声明为全局,但我仍然得到一个错误,好像我的函数不知道这个变量是谁。此外,代码工作正常,完全符合我的要求,但它下面的红线和“源代码管理”选项卡中的“1 个问题”警告真的让我很困扰。这发生在我的代码中的更多地方,例如:
global sir
sir = sir.replace(caractere,lista_optiuni[index],1)
这行代码在同一个函数中也出现了同样的错误,但由于某种原因它不再出现,而是专注于我函数的第 3 行代码。此外,sterge_lambda(sir) 只是将某个字符替换为 '',不确定单行函数是否值得制作,但无论如何。
P.S.:代码是在 VSCode 中用 Python 3.7 编写的。
【问题讨论】:
-
鉴于 Python 中 scope 的规则,通过在函数外部(或“上方”)初始化
sir,它应该已经在范围内,即使没有global声明。 -
我读了一些关于范围规则以及如何使用全局变量的信息,我很确定我做对了,所以我可以看到 2 种不同的可能性:1)我错了 2 ) IntelliSense、Python Linter、Interpreter 或任何负责指出这些“问题”的东西,都将其标记为误报。
-
尝试删除
global声明,看看问题是否消失 -
@DanielR.Livingston:不,没有
global,分配将使其成为本地。这只是一个 pylint 误报。
标签: python python-3.x visual-studio-code