运行时在 Python 上使用 Pickle 的应用程序崩溃

Posted

技术标签:

【中文标题】运行时在 Python 上使用 Pickle 的应用程序崩溃【英文标题】:App Using Pickle On Python Crashing When Running 【发布时间】:2022-01-14 06:16:30 【问题描述】:

我已经尝试制作一个简单的记事本应用程序(未完成,所以“y”不完整)

import pickle
var1 = input("Open Last Note?(y/n)")
if var1 = "y":


if var1 = "n":
    note = input("Note")
    class MyClass()
        def __init__(self, param):
            self.param = param
 
    def save_object(obj):
        try:
            with open("data.pickle", "wb") as f:
                pickle.dump(obj, f, protocol=pickle.HIGHEST_PROTOCOL)
        except Exception as ex:
            print("Error during pickling object (Possibly unsupported):", ex)
 
    obj = MyClass(note)
    save_object(obj)

【问题讨论】:

如果 var1 == 'y' 应该是: 始终将完整的错误消息(从单词“Traceback”开始)作为文本(不是屏幕截图,不是指向外部门户的链接)(不是在 cmets 中)。还有其他有用的信息。 为了使代码更具可读性,您可以将class 放在顶部 - 在imports 之后。将 functions 添加到 classes 之后。不要将classesfunctions 放在if/else 中——它不能使代码更快,但它可以使代码更具可读性。查看更多:PEP 8 -- Style Guide for Python Code 我不知道你的问题是什么,但代码对我有用而不会崩溃。 请澄清您的具体问题或提供更多详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。 【参考方案1】:

您的应用程序崩溃,因为这里是一个错误。下一个样本不正确:

if True:

if True:
    #comment

如果函数的表达式没有主体,你必须写pass

if True:
   pass

if True:
   #comment
   pass

你也可以使用Ellipsis:

if True:
    ...
#Elepsis

您的代码中还有另一个错误:

import pickle
var1 = input("Open Last Note?(y/n)")
if var1 == "y": #need double = in compare
    pass

if var1 == "n": #need == in compare
    note = input("Note")
    class MyClass(): #you miss colon
        def __init__(self, param):
            self.param = param
 
    def save_object(obj):
        try:
            with open("data.pickle", "wb") as f:
                pickle.dump(obj, f, protocol=pickle.HIGHEST_PROTOCOL)
        except Exception as ex:
            print("Error during pickling object (Possibly unsupported):", ex)
 
    obj = MyClass(note)
    save_object(obj)

【讨论】:

这行得通,但是当我尝试读取泡菜文件时,它就结束了(我会留下错误日志,但它没有留下) 当然if var1=='y': pass你需要在这个块中添加一些动作,应用程序的逻辑也不好:主要动作在'n'块中。我推荐下一个逻辑:if var1=='y': file=open('pickle.db','wb+'); else: file=open('pickle.db','wb'); #now main code

以上是关于运行时在 Python 上使用 Pickle 的应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章

python3_pickle模块详解

python3之序列化(pickle&json)

Python中Pickle模块的dump()方法和load()方法

python二次学习之二(第一天学到的一个重点pickle模块)

Python 序列化

Python 序列化