Python 泡菜不是';t工作,因此创建的txt文件为空
编写一个程序,定义具有以下属性的类电影:标题、导演、长度(电影的长度,以分钟为单位)。创建类Movie的五个对象,对它们进行pickle,并将它们存储在一个文件中Python 泡菜不是';t工作,因此创建的txt文件为空,python,pickle,Python,Pickle,编写一个程序,定义具有以下属性的类电影:标题、导演、长度(电影的长度,以分钟为单位)。创建类Movie的五个对象,对它们进行pickle,并将它们存储在一个文件中 #!/usr/local/bin/python import pickle class Movies: def __init__(self,title,director,length): self.x=title self.y=director self.z=length de
#!/usr/local/bin/python
import pickle
class Movies:
def __init__(self,title,director,length):
self.x=title
self.y=director
self.z=length
def main():
movie1 = Movies(1,100,10)
movie2 = Movies(2,200,20)
movie3 = Movies(3,300,30)
movie4 = Movies(4,400,40)
movie5 = Movies(5,500,50)
main()
import pickle
try:
file=open("movies.txt","w")
fold =[movie1,movie2,movie3,movie4,movie5]
pickle.dump[fold,file]
except IOError:
print("file could not be open")
except ValueError:
print("could not make list")
except:
print("some unknown error")
else:
print("successfully done!")
finally:
print("printing always")
file.close()
所以一切正常,但movies.txt文件是空的。我是Python新手,所以我在异常处理方面的经验较少。但据我所知,泡菜不管用 您正在函数
main
中定义电影变量,但是它们不会出现在您定义try
块的范围内。此外,正如在问题的注释中所指出的,您使用了错误的语法来调用pickle.dump
。它应该使用括号而不是尖括号,即pickle.dump(fold,file)
最后,将try
块移动到main
函数将使事情按预期工作。像这样:
def main():
movie1 = Movies(1,100,10)
movie2 = Movies(2,200,20)
movie3 = Movies(3,300,30)
movie4 = Movies(4,400,40)
movie5 = Movies(5,500,50)
import pickle
try:
file=open("movies.txt","w")
fold =[movie1,movie2,movie3,movie4,movie5]
pickle.dump(fold,file)
except IOError:
print("file could not be open")
except ValueError:
print("could not make list")
except:
print("some unknown error")
else:
print("successfully done!")
finally:
print("printing always")
file.close()
main()
代码中仍然存在一些风格问题,但这应该会让您继续
pickle.dump[…]
应该是pickle.dump(…)
-注意括号。我有与per相同的建议-减小try
块的大小。如果您将所有内容都包装在try
中,就不可能准确地找出问题所在。除了,请阅读裸露的。这将使程序打印“一些未知错误”。。。除了由于出现SyntaxError
,代码片段甚至不会运行。pickle.dump中没有SyntaxError
。有很多对象都有\uuu getitem\uu
方法。Python直到到达那里才知道pickle不知道。@ramcdougal:你说得很对,我的坏。。。我显然需要另一杯咖啡-但是提交的代码仍然应该打印“一些未知错误”,因为namererror
位于try
块的第二行。@Brunodesshuilliers现在的答案应该清楚地说明如何运行代码并产生预期的结果。我认为最初的问题由于复制粘贴代码而出现了一些格式错误(这在python中并不少见,尤其是不幸的)。@user1836292 pickle序列化了折叠
列表并将其写入文件。它不是一个由人类读取的文本文件,而是一个可以由python读取的文件,用于重新创建被转储的数据。如果您想获得一个可以阅读的文本文件,那么pickle
不是您想要使用的。