Обеспечение, что Исключения всегда пойманы

Вот простое решение для простой функции:

.toJSON() Метод

Вместо сериализуемого класса JSON реализуйте метод сериализатора:

import json

class Object:
    def toJSON(self):
        return json.dumps(self, default=lambda o: o.__dict__, 
            sort_keys=True, indent=4)

Итак, вы просто вызываете его для сериализации:

me = Object()
me.name = "Onur"
me.age = 35
me.dog = Object()
me.dog.name = "Apollo"

print(me.toJSON())

выведет:

{
    "age": 35,
    "dog": {
        "name": "Apollo"
    },
    "name": "Onur"
}
25
задан Cœur 29 July 2018 в 18:55
поделиться

6 ответов

См. Прагматический взгляд на спецификации исключений по причинам, почему нет.

Единственный способ, которым вы можете «помочь», - это документировать исключения, которые может выдавать ваша функция, например, в виде комментария в заголовочном файле, объявляющего это. Это не применяется компилятором или чем-то еще. Используйте обзоры кода для этой цели.

24
ответ дан CloudyMarble 28 November 2019 в 21:26
поделиться

Вы не должны использовать исключение здесь. Это, очевидно, не исключительный случай, если необходимо ожидать его везде, Вы используете эту функцию!

А лучшее решение состояло бы в том, чтобы заставить функцию возвращать экземпляр чего-то вроде этого. В сборках отладки (принимающий разработчиков осуществляют пути выполнения кода, которые они только что записали), они получат утверждение, если они забудут проверять ли операция, за которой следуют или нет.

class SearchResult
{
  private:
    ResultType result_;
    bool succeeded_;
    bool succeessChecked_;

  public:
    SearchResult(Result& result, bool succeeded)
      : result_(result)
      , succeeded_(succeeded)
      , successChecked_(false)
    {
    }

    ~SearchResult()
    {
      ASSERT(successChecked_);
    }

    ResultType& Result() { return result_; }
    bool Succeeded() { successChecked_ = true; return succeeded_; }
}
9
ответ дан Markus Safar 28 November 2019 в 21:26
поделиться

Вне вашего вопроса, поэтому я обсуждал не публиковать это, но в Java на самом деле есть 2 типа исключений, проверенных и непроверенных. Основное отличие состоит в том, что, как и в c[++], вам не нужно ловить непроверенное исключение.

Для хорошей ссылки попробуйте это

3
ответ дан CloudyMarble 28 November 2019 в 21:26
поделиться

там способ, которым можно гарантировать, что выданные исключения всегда пойманы с помощью попытки/выгоды функцией вызова?

я нахожу его довольно забавным, что толпа Java - включая меня - старается избегать контролируемых исключительных ситуаций. Они пытаются проложить себе путь вокруг того, чтобы быть вынужденным поймать Исключения при помощи RuntimeExceptions.

0
ответ дан dlinsin 28 November 2019 в 21:26
поделиться

Chris', вероятно, имеет лучший чистый ответ на вопрос:

Однако мне любопытно на предмет корня вопроса. Если пользователь должен всегда , обертывают вызов в блок попытки/выгоды, позвонивший пользователями должен функционировать, действительно выдают исключения во-первых?

Это - трудный вопрос для ответа без большего количества контекста относительно рассматриваемой кодовой базы. Стрелять от бедра, я думаю, что лучший ответ здесь должен обернуть функцию, таким образом, что рекомендуемый (если не только, в зависимости от полного стиля исключения кода) открытый интерфейс делает попытку/выгоду для пользователь. Если Вы просто пытаетесь удостовериться, что нет никаких необработанных исключений в Вашем коде, модульных тестах и не кодируют обзор, вероятно, лучшее решение.

2
ответ дан Community 28 November 2019 в 21:26
поделиться

Или вы можете начать создавать критические исключения. Конечно, исключение нарушения прав доступа привлечет внимание ваших пользователей.

-1
ответ дан Ryan Fox 28 November 2019 в 21:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: