#python #python-3.x #crash #pickle
#Python #python-3.x #сбой #pickle
Вопрос:
Я попытался создать простое приложение для блокнота (не завершено, поэтому «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)
Комментарии:
1. это должно быть, если var1 == ‘y’:
2. всегда указывайте полное сообщение об ошибке (начинающееся со слова «Traceback») в вопросе (не в комментариях) в виде текста (не скриншота, не ссылки на внешний портал). Есть и другая полезная информация.
3. чтобы сделать код более читаемым, вы могли бы поместить
class
вверху — послеimport
s. Adnfunctions
ставится послеclasses
. Не помещайтеclasses
andfunctions
внутрьif/else
— это не может сделать код быстрее, но делает код более читаемым. Подробнее: PEP 8 — Руководство по стилю для кода Python4. Я не знаю, в чем ваша проблема, но код работает для меня без сбоев.
5. Пожалуйста, уточните вашу конкретную проблему или предоставьте дополнительные сведения, чтобы выделить именно то, что вам нужно. Как написано в настоящее время, трудно точно сказать, о чем вы спрашиваете.
Ответ №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)
Комментарии:
1. это работает, но когда я пытаюсь прочитать файл pickle, он просто заканчивается (я бы оставил журнал ошибок, но он его не оставил)
2. конечно
if var1=='y': pass
, вам нужно добавить какое-то действие в этот блок, также логика приложения не очень хороша: основное действие находится в блоке ‘n’. Я рекомендую следующую логику:if var1=='y': file=open('pickle.db','wb '); else: file=open('pickle.db','wb'); #now main code