Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 泡菜不是';t工作,因此创建的txt文件为空_Python_Pickle - Fatal编程技术网

Python 泡菜不是';t工作,因此创建的txt文件为空

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

编写一个程序,定义具有以下属性的类电影:标题、导演、长度(电影的长度,以分钟为单位)。创建类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

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
不是您想要使用的。