我已经阅读了有关此错误的信息,但事实是我不认为我应该在这里收到此错误,而且我从未见过有人遇到此问题。这是我的代码:
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)
这行代码在相同的函数中也给出了相同的错误,但由于某种原因,它不再起作用,而是着重于我函数的第三行代码。另外,sterge_lambda(sir)只是用''替换了一个特定的角色,不确定一个函数是否值得制作,但是无论如何。
P.S .:该代码是在VSCode中用Python 3.7编写的。
答案 0 :(得分:0)
Visual Studio使用的默认linter pylint
抱怨,因为在调用sir
和表达式{{之前,它没有找到任何可以为substituie()
分配内容的代码。语句sterge_lambda(sir)
中的1}}运行。
这可能表明您的代码有问题,因为在实际执行sir = sterge_lambda(sir)
时,任何地方都没有设置全局名称sir
,那么您将得到一个subtituie()
异常。
如果您确定这不会在您的项目中发生,可以通过在同一行上添加一个NameError: name 'sir' is not defined
项(其中pylint
来告诉# pylint: disable=...
忽略此特定问题)。将鼠标悬停在红线上方时,将其替换为对话框中可见的错误代码:
...
或者对于E0601,您可以使用符号名sir = sterge_lambda(sir) # pylint: disable=E0601
:
used-before-assignment
您可以通过在命令行上运行sir = sterge_lambda(sir) # pylint: disable=used-before-assignment
来查看消息名称及其错误代码的完整列表,或者可以使用pylint --list-msgs
访问有关单个消息的信息。
答案 1 :(得分:0)
似乎定义函数和声明在所述函数内部使用的全局变量的顺序很重要。时间:
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 = start
虽然执行仍然可以正常执行,但会导致弹出错误消息,该代码:
sir = start
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
不抱怨任何问题。唯一的区别是,在第一个版本中,函数中使用的变量是在函数定义之后声明的。这不是执行问题,只是它的解释方式。