сериализация python json попробовать/исключить

Я пытаюсь сериализовать тривиальный объект (только атрибуты/значения), у меня есть этот метод в моем классе.

def to_json(self,client):
    service=self._service
    path="jsonphp/"
    path+=client
    if not os.path.exists(path):
        os.makedirs(path)
    with cdd(path):
      print os.getcwd()
      path=service+".json"
      with open(path, 'w') as outfile:
        try:
          json.dump(self.__dict__, outfile)
        except:
          print "serialization failed"

вся часть перед попыткой/исключением состоит в том, чтобы перейти к правильной папке. Вроде работает плавно. Но когда я использую этот метод, он всегда печатает: serialization failed из моего except, даже если мой файл .json создан и данные в нем правильно сохранены: {"_attr1": "On", "_attr2": "On", "_attr3": "Off"} Я думал, что блок except посещался только в случае возникновения ошибки.

Мои вопросы следующие: это «нормальное» поведение try/except?

Если нет, то как получить информацию об исключении, которое перехватывает мой за исключением?

Может ли это быть исключение где-то выше в коде (до того, как я вызову to_json()), которое там перехвачено?


person pwnsauce    schedule 21.04.2016    source источник
comment
проблема с отступом?   -  person Danny Cullen    schedule 21.04.2016
comment
Я так не думаю. вы имеете в виду где-то до вызова этой функции?   -  person pwnsauce    schedule 21.04.2016


Ответы (1)


Я считаю, что это скорее вопрос обработки исключений, чем что-либо еще. Поскольку у вас, вероятно, будут возникать исключения во время ваших усилий по программированию, важно правильно с ними обращаться. Редко исключение должно быть таким широким, и в случае, когда вы не понимаете, почему существует исключение, вы должны распечатать исключение. Это даст вам возможность найти исключение и определить основную причину вашей проблемы, а также очень поможет вам в дальнейшем изучении Python.

Измените свой, кроме чтения:

except Exception as e:
          print "serialization failed", e

Это напечатает точное исключение на вашей консоли и позволит вам найти или попросить о помощи.

person Chris    schedule 21.04.2016
comment
Благодарность ! Распечатанное исключение имеет больше смысла! Я собираюсь работать над обработкой исключений лучше. Проблемой был атрибут, который нельзя сериализовать. - person pwnsauce; 21.04.2016
comment
Превосходно. Def прочитал об этом, так как вы можете обрабатывать каждое известное исключение по имени и использовать исключение, кроме исключения, чтобы поймать вещи, о которых вы еще не подумали, а затем обработать их, когда они появятся. Удачи! - person Chris; 21.04.2016