字符串索引超出范围 - 如何解决python错误

时间:2014-11-26 22:43:51

标签: python

murphy=raw_input("Enter your message: ")
infile=open("C:\Users\Livio\Desktop\IMO2015.bmp","rb")
header=infile.read(54)
body=infile.read()
message=open("C:\Users\Livio\Desktop\IMO2015.bmp","rb")
messagecontent=message.read()
outfile=open("C:\Users\Livio\Desktop\Output.bmp","wb")
outfile.write(header)

def b10tob2(num):
    out=[]
    power=0
    while num>0:
            digit=num%(2**(power+1))
            num=num-digit
            out.append(digit/(2**power))
            power=power+1
    while len(out)<8:
            out.append(0)
    return out

y=0
for x in messagecontent:
    base2list=b10tob2(ord(x))
    for z in base2list:
        if ord(body[y])==255:
             z=z*(-1)
        outfile.write(chr(ord(body[y])+z)) 
        y=y+1
outfile.write(body[0:len(body)])

当我运行此代码时,我得到输出文件,但是我也收到一个错误,显示以下文字:

string index out of range

我该怎么做才能解决这个无聊的错误?

1 个答案:

答案 0 :(得分:1)

据推测,例外来自if ord(body[y])==255:,因为在某些时候,y会变得大于len(body)

这似乎很明显应该发生。 messagecontent.bmp文件的全部内容。 body是同一个.bmp文件的内容减去前54个字节。对于messagecontent中的每个字节,您需要将y递增8次,因此在某些时候您很快就会超过body的结尾。

为了使其更具体,让我们说该文件长度为854字节。因此,body是800字节,messagecontent是854字节。因此,对于messagecontent的第一个字节,循环遍历该字节的8位,递增y 8次。对于第二个字节,同样的事情。在100字节之后,您现在最多为800.因此,对于第101个字节,您尝试阅读body[800],这会引发IndexError

由于我不知道这段代码应该做什么,我不能告诉你应该做什么。但我可以告诉你,尝试访问此列表的末尾肯定是而不是你应该做什么。