我在Python中有一个非常尴尬的索引超出范围错误。对我来说真的没有意义。 这是我的代码:
def binarytotext(listing):
size = len(listing)
phrase = ""
for arguments in range(size):
temp = listing[arguments]
sizebin = 7
aski = 0
for arguments2 in range(sizebin):
if (arguments2 == 1):
inter = int(temp[arguments2]) * 64
aski = aski + inter
elif (arguments2 == 2):
inter = int(temp[arguments2]) * 32
aski = aski + inter
elif (arguments2 == 3):
inter = int(temp[arguments2]) * 16
aski = aski + inter
elif (arguments2 == 4):
inter = int(temp[arguments2]) * 8
aski = aski + inter
elif (arguments2 == 5):
inter = int(temp[arguments2]) * 4
aski = aski + inter
elif (arguments2 == 6):
inter = int(temp[arguments2]) * 2
aski = aski + inter
elif (arguments2 == 7):
inter = int(temp[arguments2]) * 1
aski = aski + inter
letter = chr(aski)
phrase = phrase + letter
return phrase
代码运行正常,它确实有效,但是当它执行完毕时它会抛出这个错误:
inter = int(temp[arguments2]) * 64
IndexError: string index out of range
这对我来说没有意义,因为我的功能一直工作到最后。这真的很尴尬。我不明白。
答案 0 :(得分:0)
看起来你在listing
的末尾有一个额外的空字符串。您的错误由第一个索引temp[0]
触发。
请注意,您的代码相当不同于pythonic。使用索引和一些数学计算每个位的乘数更好,而不是需要为每种情况明确地写出来。而不是迭代范围和索引来获取值,直接迭代迭代(如果您还需要索引,请使用enumerate
):
for temp in listing:
for index, value in enumerate(temp):
inter = int(value) * 64 >> index
aski += inter
您也可以使用int(temp, 2)
将二进制字符串直接转换为整数,而不是自己转换。 "".join(chr(int(binary_string, 2)) for binary_string in listing)
让你的整个功能完成一行!