Функция просмотра соединения выдает ошибку 500 вместо перехвата исключения

#python #flask #swagger #connexion

#python #flask #развязность #подключение

Вопрос:

Итак, у меня есть следующая функция просмотра в connexion (я пытаюсь работать над открытым проектом APIV3):

 def my_view_func_in_python():
    return_dict = {"status": False, "stdout": None, "stderr": None}
    try:
        payload = connexion.request.get_json()
        json_data = payload["json"]
        fileName = payload["fileName"]
        text_lines = []

        for line in json_data["res"][0]["lines"]:
            text_lines.append(line["text"])

        text = " ".join(text_lines)
        os.remove("./assets/request.jpg")

        return_dict.update([
            ("status", True)
        ])

    except BaseException as ex:
        return_dict.update([
            ("stderr", ex)
        ])

    return return_dict
  

Теперь по какой-то причине, если я даю пустое значение поля json через swagger, код прерывается в строке, которая имеет цикл for for line in json_data["res"][0]["lines"] . Но если она прерывается, она должна перейти в строку except и мирно вернуть return_dict . Но то, что она возвращает мне, — это ошибка 500 в swagger.

ВЫВОД SWAGGER:

 {
  "detail": "The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application.",
  "status": 500,
  "title": "Internal Server Error",
  "type": "about:blank"
}
  

и какую ошибку она выдает мне в серверной части, где я разместил приложение:

 TypeError: Object of type 'KeyError' is not JSON serializable
  

Я перепробовал много мест, спецификации open apiv3, документацию swagger и документацию connexion. Я не могу просто поймать эту ошибку! Что я могу сделать?

Комментарии:

1. Что именно находится в dict return_dict ? Я считаю, что исключение происходит из-за сбоя Flask / Connexion при попытке сериализовать return_dict как JSON. Похоже, вы помещаете объект исключения в dict. Для начала поместите в dict только простые строковые ключи и значения.