当前位置: 首页 > news >正文

Python Flask 在网页应用程序中处理错误和异常

Python Flask 在网页应用程序中处理错误和异常

  • Python Flask 在网页应用程序中处理错误和异常

Python Flask 在网页应用程序中处理错误和异常

在我们所有的代码示例中,我们没有注意如何处理用户在浏览器中输入错误的URL或向我们的应用程序发送错误的参数集的情况。这不是设计意图,但目的是首先关注网页应用程序的关键组件。网页框架的美妙之处在于,它们通常默认支持错误处理。如果发生任何错误,将自动返回相应的状态代码。错误代码被很好地定义为HTTP协议的一部分。例如,从400到499的错误代码表示客户端请求的错误,而从500到599的错误代码则表示服务器在执行请求时出现问题。下面总结了一些常见的错误:

错误代码名字描述
400Bad Request (坏请求)这个错误表明了或者 URL 或者 请求内容有错误
401Unauthorized (未认证)当用户名或密码错误或没有提供时,会出现这个错误
403Forbidden (禁止)这个错误表明一个用户访问了他不被允许访问的资源
404Not Found (未发现)当客户端尝试访问不存在的资源时,会返回这个错误。通常情况下是 URL 错了。
500Interanl Server Error(服务器内部错误)这个错误表明了请求是正确的,但是在服务器内部出现了错误。

https://httpstatuses.com/ 这个网站上有完整的错误列表。

Flask 框架还附带了一个错误处理框架。在处理客户端请求时,如果我们的程序崩溃,默认情况下会返回 500 Internal Server Error。如果客户端请求的 URL 未映射到任何Python函数,Flask 将向客户端返回 404 Not Found错误。这些不同的错误类型被实现为HTTPException 类的子类,该类是 Flask 库的一部分。

如果我们想用自定义行为或自定义消息处理这些错误或异常,我们可以向 Flask 应用程序注册我们的处理程序。请注意,错误处理程序是 Flask 中的一个函数,仅在发生错误时触发,我们可以将特定的错误或通用异常与我们的处理程序相关联。我们构建了一个示例代码来从较高的层次说明这个概念。首先,我们将演示一个简单的网页应用程序,它有两个函数(hellogreeting)来处理两个URL,如下面的示例代码所示:

# 第一部分
import json
from flask import Flask, render_template, abort
from werkzeug.exceptions import HTTPException

app = Flask(__name__)

@app.route('/')
def hello():
    return "Hello, World!"

@app.route('/greeting')
def greeting():
    x = 10 / 0
    return "你不会看到这个提示。"

为了处理错误,我们将使用 errorHandler 装饰器针对应用程序实例注册我们的处理程序。对于我们的示例代码(如下所示),我们针对 Flask 应用程序的错误代码 404 注册了一个 page_not_found 处理程序。对于错误代码 500 ,我们注册了一个 internal error 函数作为错误处理程序。最后,我们为 HTTPException 类注册了 generic_handler。此通用处理程序将捕获 404500 以外的错误或异常。下面显示了一个包含所有三个处理程序的示例代码:

# 第二部分
@app.errorhandler(404)
def page_not_found(error):
    return render_template('error404.html'), 404

@app.errorhandler(500)
def internal_server_error(error):
    return render_template('error500.html'), 500

@app.errorhandler(HTTPException)
def generic_error_handler(error):
    error_detail = json.dumps({
        "code": error.code,
        "name": error.name,
        "description": error.description,
    })
    return render_template("error.html", err_msg=error_detail), error.code

为了便于说明,我们还编写了带有自定义消息的基本 Jinja 模板:error404.htmlerror500.htmlerror.htmlerror404.htmlerror500.html 模板使用的是模板中硬编码的消息。但是,error.html 模板需要来自网页服务器的自定义消息。为了测试这些示例应用程序,我们将通过浏览器或 curl 实用程序请求以下内容:

  • GET http://localhost:5000/:我们期望一个普通的回应;
  • GET http://localhost:5000/hello:我们期望一个 404 错误。这是因为没有 Python 程序映射到 /hello 网址,Flask 应用程序会渲染 error404.html
  • GET http://localhost:5000/greeting:我们期望一个 500 错误。这是因为我们尝试用零除一个数,然后触发了 ZeroDevisionError 异常。因为这是一个服务端错误,它会触发 internal_server_error 处理函数,这个函数会渲染 error500.html
  • POST http://localhost:5000/:为了模拟通用处理程序的角色,我们将发送一个触发 404500 以外的错误代码的请求。这很容易实现,只需发送一个期待 GET 请求的 URL 的 POST 请求,在这种情况下,服务器将引发 405 错误(对于不受支持的HTTP方法)。我们的应用程序中没有专门针对错误代码 405 的错误处理程序,但我们已经注册了一个带有 HTTPException 的通用处理程序。此通用处理程序将处理此错误并呈现通用 error.html 模板。

<完>

http://www.dtcms.com/a/61780.html

相关文章:

  • MySQL配置文件my.cnf和mysql.cnf、mysqld.cnf的区别
  • 【算法】二叉树的递归遍历
  • 【Axure资料】110套优质可视化大屏模板+图表组件+科技感元件等
  • Filebeat收集nginx日志到elasticsearch,最终在kibana做展示。
  • 绪论数据结构基本概念(刷题笔记)
  • Docker数据管理,端口映射与容器互联
  • 华为hcia——Datacom实验指南——三层交换和ARP的工作原理
  • 【愚公系列】《AI Agent技术、应用与商业》003-Al Agent 的分类方式
  • 【从零开始学习计算机科学】计算机组成原理(七)存储器与存储器系统
  • 系统架构的评估的系统的质量属性
  • Go本地缓存设计与实现
  • [微服务设计]1_微服务
  • Liunx——动静态库
  • AXI接口总结
  • 蓝桥杯备赛-差分-推箱子
  • 虚幻基础:动画系统
  • 推荐一款好用在线免费软件工具箱-传道软件箱
  • PostgreSQL - Windows PostgreSQL 下载与安装
  • Facebook 与信息传播:塑造新闻和媒体的新生态
  • 前端计算精度保卫战:Vue3中big.js的加减乘除实战指南
  • 深度学习系列80:Pike-RAG解析
  • C#工业上位机实时信号边沿检测实现
  • 【前端】【nuxt】几种在 Nuxt 客户端使用console的方式
  • 基于vue框架的在线考试系统的设计与实现l9385(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • python编写的一个打砖块小游戏
  • Leetcode做题记录----1
  • 数据结构:有序表的插入
  • @EnableDiscoveryClient和@EnableEurekaClient springboot3.x
  • AI数字人| Fay开源项目、UE5数字人、本地大模型
  • 计算机网络----第一章:概论