我读过这个错误,但问题是我认为我不应该在这里得到这个错误,我从来没有见过有人有这个问题。这是我的代码:
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问题”警告确实让我很困扰。在我的代码中,这种情况发生在更多的地方,例如:
^{pr2}$这行代码在同一个函数中也给出了相同的错误,但由于某些原因它不再出现,而是集中在我函数的第三行代码上。另外,sterge_lambda(sir)只是简单地将某个字符替换为“”,不确定一个单行函数是否值得创建,但是无论如何。在
注:代码是用python3.7在VSCode中编写的。在
visualstudio使用的默认linter
pylint
正在抱怨,因为在调用substituie()
之前,它没有找到任何代码可以为sir
赋值,并且运行sir = sterge_lambda(sir)
中的表达式sterge_lambda(sir)
。在这可能表示您的代码有问题,因为在实际执行
subtituie()
时,没有在任何地方设置全局名称sir
,那么您将得到一个NameError: name 'sir' is not defined
异常。在如果您确定在项目中不会发生这种情况,可以告诉
pylint
忽略此特定问题,方法是在同一行添加一个# pylint: disable=...
条目,其中...
将替换为当您悬停在红线上时对话框中可见的错误代码:或者您可以对E0601使用符号名,即
^{pr2}$used-before-assignment
:您可以通过在命令行上运行
pylint list-msgs
来查看消息名称及其错误代码的完整列表,也可以使用pylint help-msg=<code-or-name>
访问单个消息的信息。在似乎我定义函数和声明函数内部使用的全局变量的顺序很重要。同时:
将导致弹出错误消息,尽管执行仍正常进行,但以下代码:
^{pr2}$不抱怨任何问题。唯一的区别是在第一个版本中,函数中使用的变量是在函数定义之后声明的。这不是一个执行问题,只是它被解释的方式。在
相关问题 更多 >
编程相关推荐