2013-07-06 65 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