2013-07-06 66 views
1

我有python解压的问题。Python解压错误

self.value = struct.unpack("<I", f.read(4))[0] 

对于值:0x17df32025031456)返回错误

<class 'struct.error'>: unpack requires a string argument of length 4 

但对于价值0x116fb0018283264)就可以了。价值太大了?更改为“我”为“L”?


我仍然有这个问题; /我的输出:http://pasteboard.s3.amazonaws.com/images/TjwtuTq.png代码:

def deserialize(self, f): 
     buf = f.read(8) 
     log.error("\n#####################\nCTxOut f: %s \nf8: %s\nf8l: %i\n#####################" % (f.getvalue(), buf, len(buf))) 
     self.nValue = struct.unpack("<q", buf)[0] 
     self.scriptPubKey = deser_string(f) 

错误:

[Failure instance: Traceback: : unpack requires a string argument of length 8

感谢您的帮助!

回答

3

问题是 - 正如错误所述 - 你没有传递长度为4的字符串到unpack

f.read(4) 

不一定返回4个字节,它可能会返回0和4个字节之间的任何东西,这取决于有多少字节的缓冲区可用,或者wheather流位于EOF - 我猜是这里的情况。

请检查你传递给函数多少字节:

buf = f.read(4) 
if len(buf) == 4: 
    self.value = struct.unpack("<I", buf)[0] 
else: 
    ... # handle condition 
+0

一个封闭的流会给出不同的错误,但没错 - 我认为你是当场上有没有要读取的4个字节。 .. –

+0

你说得对,我真的很想知道文件在EOF而没有关闭。 – mata

+0

我的英语不太好,我不确定我是否理解你。我明白这将有助于: 'f.read(8)' 值: 'f:' - 好的 'f:' - 错误 – Sannin