【FastAPI后台API 六】异常处理

FastAPI异常处理
本文详细介绍如何在FastAPI中处理异常,包括请求参数验证异常、自定义异常及全局异常的捕获与处理,通过实例展示了如何定义和抛出自定义异常,并提供了一种集中管理异常处理的策略。

异常处理

统一捕获处理异常,使得代码更加完善,健壮。
框架内置了一些异常,当然也可以自己定义异常然后捕获处理。

完全可以参考官网(超喜欢这种风格的文档):
https://fastapi.tiangolo.com/tutorial/handling-errors/

异常捕获

在FastAPI中,最常见的就是请求参数验证异常处理,因为FastAPI全面使用了pydantic来做数据类型校验,所以最常见的异常就是ValidationError , 然后FastAPI继承了这个错误,专门捕获请求参数异常的RequestValidationError

捕获异常的语法

from fastapi.exceptions import RequestValidationError

@app.exception_handler(RequestValidationError)
async def request_validation_exception_handler(request: Request, exc: RequestValidationError):
    """
    请求参数验证异常
    :param request: 请求头信息
    :param exc: 异常对象
    :return:
    """
    # 日志记录异常详细上下文 
    logger.error(f"全局异\n{request.method}URL{request.url}\nHeaders:{request.headers}\n{traceback.format_exc()}")
    return response_code.resp_422(message=exc.errors())

自定义异常

我是这样做的,在utils/custom_exc.py文件下定义好各种异常

### 解决 FastAPI 后台不响应的问题 当遇到 FastAPI 应用程序后台不响应的情况时,可以采取多种措施来诊断并修复该问题。以下是详细的排查方案: #### 1. 检查 API 请求头配置 确保请求头部设置正确无误。例如,在发送带有认证令牌的请求时,应按照如下方式添加必要的 HTTP 头部信息[^1]: ```python import requests headers = { 'X-Auth-Token': 'SUPER_SECRET_API_KEY', } response = requests.get('http://localhost:8000/endpoint', headers=headers) print(response.status_code) ``` #### 2. 验证服务器状态与日志记录 确认 FastAPI 服务正在运行,并查看应用程序的日志文件以获取任何潜在错误提示。通常可以在启动命令中加入 `--log-level debug` 参数以便获得更详尽的日志输出。 #### 3. 测试网络连接稳定性 排除客户端到服务器之间的网络通信障碍,尝试通过不同的设备或环境访问接口;也可以利用工具如 Postman 或 curl 来独立验证 API 的可用性。 #### 4. 调整超时时间设定 适当增加请求超时时限参数,防止因短暂延迟而导致失败判定。对于 Python 的 `requests` 库来说,可以通过指定 timeout 值实现这一点: ```python try: response = requests.get(url='http://localhost:8000/', timeout=5) # 设置5秒超时 except requests.exceptions.Timeout: print("The request timed out!") else: print("The request did not time out.") ``` #### 5. 审视业务逻辑处理流程 仔细审查 FastAPI 中定义的路由函数及其内部操作是否存在阻塞行为或其他异常情况。必要时可采用异步编程模型优化性能表现。 #### 6. 实施负载均衡策略 如果应用部署于多实例架构下,则需考虑引入合适的负载均衡机制分发流量,从而提高整体系统的稳定性和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值