运行时在 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
放在顶部 - 在import
s 之后。将 functions
添加到 classes
之后。不要将classes
和functions
放在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 的应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章
Python中Pickle模块的dump()方法和load()方法