如何使用哨兵处理 fastapi 错误?

ube*_*ebu 5 python error-handling sentry fastapi

我有以下函数,我正在尝试处理错误并将其发送给哨兵

import sentry_sdk
...
...
...
def create_orders(
    orders: orders_schema.OrderCreate
):
    try:
        query = "INSERT INTO orders VALUES (nextval('orders_id_seq'), :price, :currency, :created_on, :note)"
        values = {
            "price": orders.price,
            "currency": orders.currency,
            "created_on": datetime.utcnow(),
            "note": orders.note
        }
    except Exception as err:
        sentry_sdk.capture_exception(err)
    return database.execute(query, values=values)
Run Code Online (Sandbox Code Playgroud)

这是调用该函数的路由器端点

@router.post("/orders/create", response_model=orders_schema.OrderCreate)
async def create_new_order(
    orders: orders_schema.OrderCreate
):

    await crud.create_orders(orders)
    return {**orders.dict()}
Run Code Online (Sandbox Code Playgroud)

哨兵集成的工作原理是我已经测试过接收其他一些未处理的错误事件,但现在我想实际使用哨兵来满足我的需要;这是为了帮助管理已处理的错误

但是当我尝试向 api 端点发送错误的值或错误的密钥时,没有任何内容发送到哨兵

我是否遗漏了某些内容或者我该怎么做才能发送错误?

小智 0

捕获哨兵错误的行可能永远不会被执行,因为对数据库的访问位于 return 语句上...换句话说,您在 try/ except 块中的内容没有失败,因此 except 不会失败t 运行,然后代码转到返回行,您可能会失败,但此时哨兵不再捕获它