错误"Local variable 'results' might be referenced before assignment"



我对Python非常陌生。我正在尝试使用我在网上找到的教程开发一个聊天机器人。我看到了类似于我的问题的解决方案,但我正在努力实施它们。我得到的错误消息如下:

本地变量'result'可能在分配之前被引用

请参阅下面的代码。

def getResponse(ints, intents_json):
tag = ints[0]['intent']
list_of_intents = intents_json['intents']
for i in list_of_intents:
if(i['tag']== tag):
result = random.choice(i['responses'])
break
else:
result = "Please ask the right questions"
return result

如果在for循环之外定义结果,它将解决此问题:

def getResponse(ints, intents_json):
tag = ints[0]['intent']
list_of_intents = intents_json['intents']
result = "Turns out that list_of_intents was actually empty"
for i in list_of_intents:
if(i['tag']== tag):
result = random.choice(i['responses'])
break
else:
result = "Please ask the right questions"
return result

使用:

def getResponse(ints, intents_json):
tag = ints[0]['intent']
list_of_intents = intents_json['intents']
result = "Turns out that list_of_intents was actually empty"
for i in list_of_intents:
if(i['tag']== tag):
result = random.choice(i['responses'])
break
return result

如果在循环外定义结果,则不需要使用else

正如我在评论中提到的,即使是循环也可以有else部分。

CCD_ 2部分发生在循环用完"0"时;天然的";方式,即当没有任何break来结束循环时。

这意味着你可以使用这样的东西:

for i in list_of_intents:
if(i['tag']== tag):
result = random.choice(i['responses'])
break
else:
result = "Please ask the right questions"

注意else的缩进。它现在属于循环。

如果循环内的条件是CCD_ 5,则CCD_;响应";,并且循环以CCD_ 7的有效且初始化的值结束。

否则,如果循环用完(或者列表为空!(,则result将以正确的方式再次初始化。

无论哪种方式,在循环结束时,result中都有一个可以使用的有效值。

相关内容

最新更新