我正在尝试对此Bigram进行编码,但是已经给出了以下代码:
counts[given][char] += 1
IndexError: list index out of range
我不知道该如何处理。谁能帮我?
def pairwise(s):
a,b = itertools.tee(s)
next(b)
return zip(a,b)
counts = [[0 for _ in range(52)] for _ in range(52)]
with open('path/to/open') as file:
for a,b in pairwise(char for line in file for word in line.split() for char in word):
given = ord(a) - ord('a')
char = ord(b) - ord('a')
counts[given][char] += 1
我收到此错误:
Traceback: counts[given][char] += 1 IndexError: list index out of range
最佳答案
您的counts
变量是pairwise()
函数中的局部变量。
这样,尝试在counts
循环中以全局方式访问for
将会引发NameError
。但是,您改为使用一揽子except
消除了该异常。不要那样做例如,参见Why is "except: pass" a bad programming practice?。如果您想忽略索引错误,请明确捕获该异常:
except IndexError:
print 'failed'
并让其他异常到达您,以便您更正错误。
取消缩进
counts
行,这并不意味着它是pairwise()
函数的一部分:def pairwise(s):
a,b = itertools.tee(s)
next(b)
return zip(a,b)
counts = [[0 for _ in range(52)] for _ in range(52)]
with open('path/to/open') as file:
for a,b in pairwise(char for line in file for word in line.split() for char in word):
given = ord(a) - ord('a')
char = ord(b) - ord('a')
try:
counts[given][char] += 1
except IndexError:
# unknown character, ignore this one
请注意,对于小写ASCII字母(a-z)以外的任何内容,您产生的索引要么太大要么为负数。
ord('a')
是97,但是大写字母的范围是65到90。这意味着您最终会得到-32到-5的整数。那可能不是您想要的。
关于python - 我应该如何处理这个IndexError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27964992/