Python遇UnboundLocalError:变量已定义仍提示未绑定的问题求助
解决UnboundLocalError:局部变量mp004在赋值前被引用的问题
错误根源
你的get_database函数中,mp004变量仅在for循环内部的if data in i条件成立时才会被赋值。如果输入的data不存在于database的任何元素中,循环结束后mp004从未被初始化,执行return database1[mp004]时就会触发UnboundLocalError。
修复方案
推荐直接在找到匹配项时立即返回,避免未初始化变量的问题,同时处理未找到匹配的情况:
def get_database(data,database,database1): for c,i in enumerate(database): if data in i: return database1[c] # 处理未找到匹配的场景 return "未找到对应的回答"
也可以提前初始化变量,再判断是否找到匹配:
def get_database(data,database,database1): mp004 = -1 # 提前初始化默认值 for c,i in enumerate(database): if data in i: mp004 = c break # 找到后跳出循环,提升效率 if mp004 == -1: return "未找到对应的回答" return database1[mp004]
原代码与报错信息
原代码:
a = open("dialogs/dialogs.txt").read().splitlines() def parse(string): string = string.lower().split() s1 = "" for l in string: s1+=l[0] return s1 def get_database(data,database,database1): for c,i in enumerate(database): if data in i: mp004 = c return database1[mp004] ques = [] anws = [] for c,i in enumerate(a): try: m = i.split("\t") ques.append(parse(m[0])) anws.append(m[1]) except: pass print(f"Trained {c}/{len(a)-1} ",end="\r") print() while True: p = input("> ") print(get_database(p,ques,anws))
报错信息:
Traceback (most recent call last): File "/data/user/0/ru.iiec.pydroid3/files/accomp_files/iiec_run/iiec_run.py", line 31, in <module> start(fakepyfile,mainpyfile) File "/data/user/0/ru.iiec.pydroid3/files/accomp_files/iiec_run/iiec_run.py", line 30, in start exec(open(mainpyfile).read(), __main__.__dict__) File "<string>", line 28, in <module> File "<string>", line 12, in get_database UnboundLocalError: local variable 'mp004' referenced before assignment
内容的提问来源于stack exchange,提问作者user20545517
相关产品推荐
相关产品推荐

