我有以下代碼:寫pickle.dumps輸出到文件
some_dict = {'a':0, 'b':1}
line = "some_dict_b = %s\n" % pickle.dumps(some_dict,2)
exec(line)
decoded_dict = pickle.loads(some_dict_b)
decoded_dict == some_dict
在Python 3這個代碼打印真。在Python 2(2.7.8)中,我在exec行中出現錯誤。我知道轉儲在2.7返回str,同時返回3中的字節流。
我正在編寫一個程序,用於解析輸入文件中的數據,然後創建特定的內存對象並寫出使用這些對象的python腳本。我使用pickle.dumps()將這些對象寫入腳本文件中,並根據上面概述的想法將其插入到變量聲明行中。不過,我需要能夠在Python運行這段代碼2.
我也注意到,在Python 3行變量獲取每個反斜槓正確轉義和類型:
>>> line
"some_dict_b = b'\\x80\\x02...
而在Python 2我得到:
>>> line
'some_dict_b = \x80\x02...
感謝您的詳細解釋,但爲什麼代碼在Python 3中工作?那麼對象的字符串和表示視圖是否一致只是一個巧合? –
@ErwinLavalliére:如果沒有字符串表示(不是'__str__'方法),則使用__repr__'來代替。這完全是一種巧合。 :-) –