【Python异常处理】

在Python无法正常处理程序时就会发生异常,此时我们需要捕捉并处理它,否则程序就会终止执行。

例如:

x = 1 / 0
print(x)

运行结果:

ZeroDivisionError: division by zero
#此时程序终止执行

Python提供了三个非常重要的功能来处理程序在运行过程中可能出现的异常和错误,其中try/exceptelse、finally可放在except之后使用)语句块、raise语句是主要的异常处理机制,Assertions(断言)主要用于调试。

一、try/except 语句块

  • try/except 语句块用于捕获和处理异常。
  • try 块包含可能引发异常的代码,而 except 块包含处理这些异常的代码。
  • 当try 块中的代码引发异常时,程序会立即跳转到相应的 except 块,并执行该块中的代码。

如此,便在 except 块中编写处理错误的代码,以防止程序因为未处理的异常而崩溃。

示例1:

try:
    x = 1 / 0  # 这将引发一个 ZeroDivisionError 异常
except ZeroDivisionError:
    print("除数不能为0")

运行结果:

除数不能为0  
#提示出错,但程序不会终止。

在这个例子中,尝试除以0,这将引发一个 ZeroDivisionError 异常。但是,由于使用了 try/except 语句块,所以程序会捕获到这个异常,并打印出 “除数不能为0” 的消息,而不是崩溃。

示例2:异常的参数
一个异常可以带上参数,可作为输出的异常信息参数。通过except语句来捕获异常的参数。

def temp_convert(var):
        return int(var)

# 调用函数
try:
    temp = temp_convert("xys")
except ValueError as a:
    print(a)

运行结果:

invalid literal for int() with base 10: 'xys'
#会显示异常的参数,具体描述

二、raise 语句

raise 语句用于显式地引发一个异常。
当我们需要在程序中创建一个自定义错误,或者需要在特定条件下停止程序执行时,可以使用 raise 语句。

示例:在特定条件下停止程序执行

def divide(a, b):
    if b == 0:
        raise ValueError("除数不能为0啊")  # 显式地引发一个 ValueError 异常
    return a / b


try:
    result = divide(1, 0)
except ValueError as e:
    print(e)

运行结果:

除数不能为0

在这个例子中,定义一个 divide 函数,该函数在除数为0时会引发一个 ValueError 异常。然后使用 try/except 语句块来捕获和处理这个异常。当 divide(1, 0) 被调用时,会引发一个 ValueError 异常,然后 except 块会捕获这个异常,并打印出异常消息。

三、Assertions(断言)

  • 断言(Assertions)是一种用于调试目的的机制,它允许程序员在代码中设置检查点,以确保程序在运行时满足某些条件。
  • 如果断言的条件为假(即条件不满足),Python会引发一个AssertionError异常。
  • 断言通常用于在开发阶段捕获可能的编程错误,而不是用于处理正常的程序流控制或异常条件。

语法:

assert condition, "optional error message"

其中:

  1. condition是一个表达式,它应该返回一个布尔值(True或False)。
  2. "optional error message"是一个可选的字符串,当断言失败时,它将作为异常消息的一部分。
  3. condition为True,则断言通过,程序继续执行。若condition为False,则引发AssertionError,程序将终止执行,并打印出可选的错误消息(如果有的话)

示例:

def divide(a, b):
    assert b != 0, "除数不能为0啊啊啊"
    return a / b


try:
    result = divide(10, 0)
except AssertionError as e:
    print(e)

运行结果:

除数不能为0啊啊啊

在这个例子,定义了一个divide函数,它使用断言来确保除数b不为0。如果尝试用0作为除数调用divide函数,断言将失败,并引发AssertionError,打印出"除数不能为0"的错误消息。
注意:断言主要用于开发和测试阶段,以确保代码逻辑的正确性。Python可以通过命令行选项(如-O或-OO)来禁用断言。

四、用户自定义异常

通过创建一个新的异常类来定义自定义异常,这通常是通过继承内置的异常类(如Exception或它的子类)来完成的。
示例1:

class Networkerror(RuntimeError):
    def __init__(self, arg):
        self.args = arg


try:
    raise Networkerror("It's an Error")
except Networkerror as e:
    print (e.args)

运行结果:('I', 't', "'", 's', ' ', 'a', 'n', ' ', 'E', 'r', 'r', 'o', 'r')

在这个例子里,创建了一个类,基类为RuntimeError,用于在异常触发时输出更多的信息。在try语句块中,用户自定义的异常后执行except块语句,变量 e 是用于创建Networkerror类的实例。

示例2:

class MyCustomException(Exception):
    def __init__(self, message, code):
        self.message = message
        self.code = code

    # 创建一个异常实例并引发它

def some_function():
    # 模拟某些条件不满足,引发自定义异常
    raise MyCustomException("这是一个自定义异常", 123)

try:
    some_function()
except MyCustomException as e:
     print(e.message,e.code)
     print("捕获到自定义异常: {e}")

运行结果:

这是一个自定义异常 123
捕获到自定义异常: {e}

五、python标准异常

Python标准库定义了一系列内置异常,用于处理程序中可能出现的各种错误情况。这些异常提供了清晰的错误分类,帮助开发者更好地理解和处理错误。以下是一些常见的Python标准异常:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/515302.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu20.04下搜狗输入法的安装

1、安装 fcitx 输入法的框架 sudo apt install fcitx-bin sudo apt-get install fcitx-table 2、Ubuntu下的默认浏览器火狐搜索 搜狗输入法 搜狗输入法linux-首页 (下载x86_64) 3、安装依赖 sudo apt install libqt5qml5 libqt5quick5 libqt5quickwidgets5 qml-modu…

【漏洞复现】万户 ezOFFICE wf_printnum SQL注入漏洞

免责声明:文章来源互联网收集整理,请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该…

【学习心得】Numpy学习指南或复习手册

本文是自己在学习Numpy过后总是遗忘的很快,反思后发现主要是两个原因: numpy的知识点很多,很杂乱。练习不足,学习过后一段时间不敲代码就会忘记。 针对这两个问题,我写了这篇文章。希望将numpy的知识点织成一张网&…

JavaScript高级应用

学习作用域、变量提升、闭包等语言特征,加深对 JavaScript 的理解,掌握变量赋值、函数声明的简洁语法,降低代码的冗余度。 理解作用域对程序执行的影响 能够分析程序执行的作用域范围 理解闭包本质,利用闭包创建隔离作用域 了解…

面试总结------2024/04/04

1.面试官提问:你说你在项目中使用springsecurity jwt 实现了登录功能,能简单讲一下怎么实现的吗? 2.使用RabbitMQ实现订单超时取消功能 订单状态定义 首先,我们需要定义订单的不同状态。在这个示例中,我们可以定义以下…

[COCI 2011/2012 #5] EKO / 砍树 (二分)不开龙永远的痛!

不开龙long永远的痛&#xff01; 不开龙long永远的痛&#xff01; 不开龙long永远的痛&#xff01; 不开龙long永远的痛&#xff01; 不开龙long永远的痛&#xff01; //应该以最高的树为基准二分 初次尝试&#xff1a; #include<algorithm> #include<iostream&g…

图的深度优先遍历DFS得到各节点的度

在 一文中&#xff0c;我们通过了广度优先搜索来得到图结构中各结点的度&#xff0c;在这一篇文章中&#xff0c;我们要通过深度优先搜索来得到图结构中各结点的度。 初始化 初始化&#xff0c;在下面的代码中&#xff0c;我们创建了一个具有6个结点的图结构&#xff0c;以及…

YOLO电动车检测识别数据集:12617张图像,yolo标注完整

YOLO电动车检测识别数据集&#xff1a;12617张图像&#xff0c;电动车一类&#xff0c;yolo标注完整&#xff0c;部分图像应用增强。 适用于CV项目&#xff0c;毕设&#xff0c;科研&#xff0c;实验等 需要此数据集或其他任何数据集请私信

【调度工具】Azkaban用户手册

目录 一、概述 1.1 Azkaban 是什么 1.2 Azkaban 特点 1.3 Azkaban 与 Oozie 对比 功能 工作流定义 工作流传参 定时执行 资源管理 工作流执行 工作流管理 1.4 Azkaban 运行模式及架构 Azkaban 三大核心组件 Azkaban有两种部署方式 Azkaban Web Server Azkaban …

简约轻量-失信录系统源码

失信录系统-最新骗子收录查询系统源码 首页查询&#xff1a; 举报收录页&#xff1a; 后台管理页&#xff1a; 失信录系统 V1.0.0 更新内容&#xff1a; 1.用户查询,举报功能 2.界面独立开发 3.拥有后台管理功能 4.xss,sql安全过滤 5.平台用户查询 6.用户中心&#xff08;待完…

IO流:字节流、字符流、缓冲流、转换流、数据流、序列化流 --Java学习笔记

目录 IO流 IO流的分类 IO流的体系 字节流&#xff1a; 1、Filelnputstream(文件字节输入流) 2、FileOutputStream(文件字节输出流) 字节流非常适合做一切文件的复制操作 复制案例&#xff1a; try-catch-finally 和 try-with-resource 字符流 1、FileReader(文件字符…

JimuReport 积木报表

一款免费的数据可视化报表&#xff0c;含报表和大屏设计&#xff0c;像搭建积木一样在线设计报表&#xff01;功能涵盖&#xff0c;数据报表、打印设计、图表报表、大屏设计等&#xff01; Web 版报表设计器&#xff0c;类似于 excel 操作风格&#xff0c;通过拖拽完成报表设计…

C#学生信息管理系统

一、引言 学生信息管理系统是现代学校管理的重要组成部分&#xff0c;它能够有效地管理学生的基本信息、课程信息、成绩信息等&#xff0c;提高学校管理的效率和质量。本文将介绍如何使用SQL Server数据库和C#语言在.NET平台上开发一个学生信息管理系统的课程设计项目。 二、项…

前端学习<四>JavaScript基础——02-JavaScript入门:hello world

开始写第一行 JavaScript&#xff1a;hello world JS 代码的书写位置在哪里呢&#xff1f;这个问题&#xff0c;也可以理解成&#xff1a;引入 JS 代码&#xff0c;有哪几种方式&#xff1f;有三种方式&#xff1a;&#xff08;和 CSS 的引入方式类似&#xff09; 行内式&…

msyql 查看和修改字符集的方法

在插入或修改数据的时候&#xff0c;报字符集的错误&#xff0c;中文的无法进行插入修改。比如&#xff1a; update users set user_name关羽 where user_id2; 报错信息&#xff1a; ERROR 1366 (HY000): Incorrect string value: /xB9/xD8/xD3/xF0 for column user_name at …

2024年学浪视频下载器

学浪视频官方没有提供下载选项&#xff0c;但又有很多人需要学浪视频下载器&#xff0c;于是我就开发了这么一款软件&#xff0c;学浪视频下载器:小浪助手.exe 我把学浪下载器打包成压缩包&#xff0c;有需要的自己取一下 链接&#xff1a;https://pan.baidu.com/s/1y7vcqILT…

Google Chrome 常用设置

Google Chrome 常用设置 References 转至网页顶部 快捷键&#xff1a;Home 转至内容设置 chrome://settings/content 清除浏览数据 历史记录 -> 清除浏览数据 关于 Chrome 设置 -> 关于 Chrome chrome://settings/help References [1] Yongqiang Cheng, https:/…

保健品wordpress外贸模板

保健品wordpress外贸模板 健康保养保健品wordpress外贸模板&#xff0c;做大健康行业的企业官方网站模板。 https://www.jianzhanpress.com/?p3514

NucleiStudio下longan nano烧录官方例程

longan nano烧录官方例程 一、准备工作二、编译程序三、器件连接四、烧录程序 IDE:NucleiStudio202009 开发板:longan nano gd32vf103c8t6 一、准备工作 1、下载IDE 芯来科技官网下载NucleiStudio 2、下载烧录器 https://dl.sipeed.com/shareURL/LONGAN/LonganPi3H 网盘链接 …

达梦配置ODBC连接

达梦配置ODBC连接 基础环境 操作系统&#xff1a;Red Hat Enterprise Linux Server release 7.9 (Maipo) 数据库版本&#xff1a;DM Database Server 64 V8 架构&#xff1a;单实例1 下载ODBC包 下载网址&#xff1a;https://www.unixodbc.org/ unixODBC-2.3.0.tar.gz2 编译并…