Module 02 · Web App Deployment using Flask
Error Handling错误处理
欢迎学习错误处理课程。在本节内容结束后,您将能够掌握以下要点:
✅ 描述 API 服务可返回的不同 HTTP 状态码。
✅ 解释 Flask 中的错误处理机制。
✅ 阐述如何从 API 端点 返回错误。
HTTP 状态码概述
每一个 HTTP 响应都包含一个三位数字的代码,用于指示不同的错误或成功状态,客户端负责处理(Consuming)这些错误代码。
- 有效范围:100 至 599。
- 分类方式:按百位数字进行分类。
状态码类别表
| 代码范围 | 类别说明 | 详细描述 |
|---|---|---|
| 100 - 199 | ℹ️ 信息性状态码 | 表示请求已被接收,属于信息提示。 |
| 200 - 299 | ✅ 成功状态码 | 表示请求已被接收,且请求的操作已成功执行。 |
| 300 - 399 | ↪️ 重定向状态码 | 表示服务器端发生了重定向。 |
| 400 - 499 | ❌ 客户端错误 | 表示请求本身存在错误。 |
| 500 - 599 | 💥 服务端错误 | 表示服务器端发生了错误。 |
注意:本课程中编写的 API 将遵循此命名规范。例如,若客户端请求不可用的资源,应发送 404 响应;若请求不正确,应响应 400 状态码。
Flask 中的状态码处理
1. 默认行为
当您从 app.route 方法返回或使用 jsonify 方法响应请求时,Flask 服务器会自动返回 200 OK 状态码。这意味着代码执行完毕后,默认发送状态码为 200 的成功响应。
2. 自定义返回状态码
代码可以返回除默认值以外的其他状态码。Flask 允许通过以下方式显式设置:
- 使用元组 (Tuple):
在代码中,可以将状态码作为元组的一部分与响应一起发送。示例:发送内容为 "my first application in action" 的 HTML 响应,并附带状态码 200。
- 使用 make_response 方法:
可以通过 make_response 方法显式设置状态码。示例:返回与上述相同的 HTML 消息和 HTTP 状态码 200,但实现方式是调用
make_response。
常用状态码详解
在本课程中,您可能会使用到以下状态码:
成功类 (2xx)
- 200 OK:默认返回的状态码,表示请求成功。
- 201 Created:告知客户端服务器已成功创建了资源。
- 202 Accepted:表示请求已被接受并正在处理中,常用于批量处理操作。
- 204 No Content:服务器成功完成请求后返回,无内容返回。适用于不希望浏览器采取任何操作(如用户停留在当前页面)的场景。
客户端错误类 (4xx)
- 400 Bad Request:表示无效请求。可能意味着参数缺失、不当或其他方式的请求无效。
- 401 Unauthorized:表示凭证缺失或无效。
- 403 Forbidden:表示客户端凭证不足以满足请求要求。
- 404 Not Found:服务器无法找到请求的资源。
- 405 Method Not Allowed:表示请求的操作不受支持。
服务端错误类 (5xx)
- 500 Internal Server Error:用于表示服务器端发生错误。
开发实战与测试示例
作为开发人员,需要确保服务返回正确的代码。
案例分析search_response方法
该方法用于查找数据库查询参数 q:
- 解析查询参数后,服务调用模拟的
fetch_from_database方法。 - 若资源存在,代码将资源返回给客户端(隐式返回 200)。
- 若资源未找到,则返回 404。

使用curl程序调用端点测试
| 测试场景 | 返回结果 | 状态码 |
|---|---|---|
| 无查询参数调用 | 返回 "input parameter missing" (输入参数缺失) 消息 | 422 |
| 使用正确资源 ID 调用 | 返回资源正文 | 200 |
| 请求不存在的资源 | 返回 "resource not found" (资源未找到) 消息 | 404 |



应用程序级错误处理
Flask 提供了在应用程序级别处理错误消息的方法:
- 404 错误处理:
可以定义一个方法处理 404 错误,返回消息 "API not found" 并设置状态码为 404。 - 500 错误处理:
同理,可以创建一个处理 500 错误的句柄,返回消息 "something went wrong on the server" (服务器出错了)。
课程总结
在本视频中,您学习了:
- HTTP 响应需要状态码来指示请求处理的结果。
- HTTP 状态码分为多个类别,分别表示成功、用户错误或服务器错误。
- Flask 默认在响应中隐式返回成功代码 200。
- 您可以显式提供状态码。
- Flask 提供了应用程序级别的错误处理程序。