Python UnboundLocalError:局部变量';第'行;分配前参考
我编写了一个函数,它计算两个给定字符串之间的Levenshtein距离。读取包含一定数量字符串的两个文件,调用函数并计算它们之间的距离。运行程序,计算并打印所有距离。但是,一旦到达终点,就会出现错误 这是我写的一段代码:Python UnboundLocalError:局部变量';第'行;分配前参考,python,Python,我编写了一个函数,它计算两个给定字符串之间的Levenshtein距离。读取包含一定数量字符串的两个文件,调用函数并计算它们之间的距离。运行程序,计算并打印所有距离。但是,一旦到达终点,就会出现错误 这是我写的一段代码: def MyLevenshtein(String1, String2): rows = len(String1) + 1 columns = len(String2) + 1 distance = [[0 for x in range(columns)]
def MyLevenshtein(String1, String2):
rows = len(String1) + 1
columns = len(String2) + 1
distance = [[0 for x in range(columns)] for x in range(rows)]
for i in range(1, rows):
distance[i][0] = i
for i in range(1, columns):
distance[0][i] = i
for column in range(1, columns):
for row in range(1, rows):
if String1[row - 1] == String2[column - 1]:
cost = 0
else:
cost = 2
distance[row][column] = min(distance[row - 1][column] + 1, # deletion
distance[row][column - 1] + 1, # insertion
distance[row - 1][column - 1] + cost) #substitution
Distance = distance[row][column]
return Distance
source = open('D:/TestWords.txt', 'r', encoding="utf-8")
target = open('D:/RefWords.txt', 'r', encoding="utf-8")
source = source.read().splitlines()
target = target.read().splitlines()
for i in source:
for j in target:
print(i, j, MyLevenshtein(i, j))
这是出现的错误:
UnboundLocalError: local variable 'row' referenced before assignment
行
变量由内部for循环初始化,但随后在外部访问。引述:
for循环对目标列表中的变量进行赋值。
循环启动时,不会删除目标列表中的[…]名称
已完成,但如果序列为空,则它们将不会被删除
完全由循环指定给
虽然
行
变量可以在for循环外的块中使用,但它只能在循环有一些迭代时使用(另请参见)一般来说,您是在语句中定义/创建行,该语句可能运行,也可能不运行(取决于循环条件)但无论如何,你都在试图读取它的值你在让我们猜测错误在哪里。请编辑问题以包含完整的错误回溯消息。比较所有字符串后,错误将显示在程序末尾。程序末尾为print(i,j,MyLevenshtein(i,j))
<代码>行不出现在该代码行中,因此错误所在的位置不能出现。没有“外部”范围;这只是一个问题,当前范围内是否发生过对行的赋值。好吧,我删除了我的答案,因为事实证明-我错了,所以我不想在这里搞砸:)谢谢巴拉克Itkin@chepner-这主要是语义上的差异,不会改变本答案中提供的信息。我认为<<代码> 循环是它自己的范围,但我也可以看到为什么你会认为它是当前范围的一部分。当你真正的意思是“block”时,使用“scope”一词并不能让事情变得更清楚。将“scope”改为“block”如何更改它以使其不改变结果?只需将有问题的行缩进两次,使其位于内部for
循环中。这将解决您眼前的问题-可能需要一些额外的工作来计算最终结果,尽管。。。但这已经超出了你最初的问题