Flask. При обработке ошибки ZeroDivisionError в cтандарте JSON-RPC, вместо кода ошибки 400 , отображается 500

У меня программа-калькулятор для базовых действий. При делении на ноль выбрасывается исключение, которое я отрабатываю, но в итоге в коде ответа вместо 422 выходит 500. Причина непонятна.

Код:

import operator
from flask import Flask, jsonify
from flask_jsonrpc import JSONRPC

app = Flask(__name__)
jsonrpc = JSONRPC(app, "/api", enable_web_browsable_api=True)


@jsonrpc.method("calc.truediv")
def truediv(a: float, b: float) -> float:
    try:
        result = operator.truediv(a, b)
        return result
    except ZeroDivisionError as exc:
        response = jsonify(
            {
                "jsonrpc": "2.0",
                "id": 4,
                "error": {"code": -32000, "message": str(exc)},
            }
        )
        return response

if __name__ == "__main__":
    app.run("0.0.0.0", debug=True)

Ответ на запрос в Postman

Должно получиться примерно так:

Хочу получить вот это

У меня получает так:

Мой вывод


Ответы (1 шт):

Автор решения: Igor
@jsonrpc.method("calc.truediv")
def truediv(a: float, b: float) -> float | str:
    try:
        result = operator.truediv(a, b)
        return result
    except ZeroDivisionError:
        return "На ноль делить нельзя", 400

Можно ещё так:

except ZeroDivisionError:
    return {"error": "На ноль делить нельзя"}, 400
→ Ссылка