Сбой приложения, использующего Pickle на Python при запуске

#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. Adn functions ставится после classes . Не помещайте classes and functions внутрь if/else — это не может сделать код быстрее, но делает код более читаемым. Подробнее: PEP 8 — Руководство по стилю для кода Python

4. Я не знаю, в чем ваша проблема, но код работает для меня без сбоев.

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