擅长:python、mysql、java
<p>这与酸洗无关。我将编写新的示例代码来说明为什么它不起作用。你知道吗</p>
<pre><code>library = []
library.append("user_input_goes_here")
print(library[0])
# OUTPUT: "user_input_goes_here")
print(library[1])
# IndexError occurs here.
</code></pre>
<p>你只是在空名单上加了一件事。为什么你认为有两个因素?:)</p>
<p>如果您多次执行此操作,则会失败,因为您正在以<code>'ab'</code>模式而不是<code>'wb'</code>模式打开pickle文件。每次写入时都应该覆盖pickle。你知道吗</p>
<pre><code>import pickle
library = ["index zero"]
def append_and_pickle(what_to_append,what_to_pickle):
what_to_pickle.append(what_to_append)
with open("testname.pkl", "wb") as picklejar:
pickle.dump(what_to_pickle, picklejar)
# no need to close with a context manager
append_and_pickle("index one", library)
with open("testname.pkl","rb") as picklejar:
library = pickle.load(picklejar)
print(library[1])
# OUTPUT: "index one"
</code></pre>
<p>这似乎有悖常理,因为您要“附加”到列表中,但请记住,一旦pickle对象,它就不再是列表,而是pickle文件。当您向列表中添加元素时,您实际上并没有附加到文件,而是更改了对象本身!这意味着您需要完全更改文件中写入的内容,以便它用附加的额外元素来描述这个新对象。你知道吗</p>