Python 基础(十八):异常处理
❤️ 博客主页:水滴技术
🌸 订阅专栏:Python 入门核心技术
🚀 支持水滴:点赞👍 + 收藏⭐ + 留言💬
文章目录
- 一、异常是什么?
- 二、异常处理的基本语法
- 三、捕获特定的异常类型
- 四、finally语句
- 五、自定义异常
- 六、assert语句
- 七、Python内置异常
- 八、总结
- 系列文章
- 热门专栏
大家好,我是水滴~~
Python是一种易学易用的编程语言,但即使是经验丰富的开发人员也会偶尔遇到错误和异常。在这篇教程中,我们将深入讨论Python中的异常处理。
一、异常是什么?
在Python中,当发生错误或意外情况时,会引发异常。异常是Python中的一种错误处理机制,它允许程序员捕获和处理错误,以避免程序崩溃。
Python中的异常通常是由错误的语法或运行时错误引起的,例如:
-
语法错误(
Syntax Error
):在编写代码时,违反了Python语法规则。 -
运行时错误(
Runtime Error
):这是在程序运行时发生的错误,例如尝试使用未定义的变量或调用不存在的函数等。
二、异常处理的基本语法
在Python中,我们可以使用try
和except
语句来捕获和处理异常。try
语句用于包含可能引发异常的代码块,而except
语句用于定义处理异常的代码块。
以下是try
和except
语句的基本语法:
try:# 可能引发异常的代码
except:# 处理异常的代码
在上面的代码中,当try
语句块中的代码引发异常时,控制将转移到except
语句块中的代码,以处理异常。
三、捕获特定的异常类型
在实际编程中,我们通常只想捕获特定的异常类型。这可以通过指定一个或多个异常类型来实现。
以下是一个示例,演示如何捕获指定的异常类型:
try:# 可能引发异常的代码x = 10 / 0
except ZeroDivisionError:# 处理除以零的异常print("除以零错误")
except:# 处理所有其他异常print("发生了一个错误")
在上面的示例中,我们使用了两个except
语句。第一个except
语句捕获ZeroDivisionError
异常,这是由于除以零引起的异常。第二个except
语句用于处理所有其他异常。
四、finally语句
在Python中,还有一个finally
语句,它用于定义在try
语句块完成后始终要执行的代码块。无论try
语句块是否引发异常,finally
语句块都将被执行。
以下是一个使用finally
语句的示例:
try:# 可能引发异常的代码f = open("myfile.txt", "r")data = f.read()print(data)
except:# 处理异常print("无法读取文件")
finally:# 关闭文件f.close()
在上面的示例中,我们尝试打开一个名为“myfile.txt”的文件,并读取其中的数据。如果出现任何异常,我们将打印“无法读取文件”。无论是否出现异常,我们都将使用finally语句块关闭文件。
五、自定义异常
除了Python内置的异常类之外,我们还可以定义自己的异常类。这可以通过创建一个新的异常类来实现。为了创建一个新的异常类,我们必须继承Python内置的Exception
类或其子类,并定义自己的异常消息。
以下是一个示例,演示如何定义自己的异常类:
class CustomError(Exception):def __init__(self, message):self.message = message
在上面的示例中,我们创建了一个名为CustomError的自定义异常类,它继承自Python内置的Exception
类。我们定义了一个构造函数,它接受一个消息参数,并将其存储为异常消息。
我们可以在程序中使用raise
语句来引发自定义异常:
try:# 可能引发异常的代码x = int(input("请输入一个正整数:"))if x <= 0:raise CustomError("输入必须是正整数")
except CustomError as e:# 处理自定义异常print(e)
except:# 处理所有其他异常print("发生了一个错误")
在上面的示例中,我们要求用户输入一个正整数。如果输入的值小于或等于0,我们将引发自定义异常CustomError,并在except
语句块中处理它。
六、assert语句
在Python中,还有一种异常处理技术是使用assert
语句。assert
语句用于检查某些条件是否为真,并在条件不满足时引发一个异常。assert
语句的基本语法如下:
assert <condition>, <error message>
在上面的代码中,<condition>
是一个布尔表达式,如果为False
,则会引发一个异常。<error message>
是一个可选的错误消息,用于描述何时发生了异常。
以下是一个使用assert语句的示例:
x = 10
assert x == 5, "x的值应该是5"
在上面的示例中,我们使用assert
语句检查变量x的值是否等于5。由于x的值是10,不等于5,因此将引发一个异常,并输出错误消息“x的值应该是5”。
七、Python内置异常
以下是Python 3.10版本中所有内置异常类型及其含义的分层次列表:
-
BaseException:所有内置异常的基类
-
SystemExit:程序退出时引发的异常
-
KeyboardInterrupt:用户中断程序时引发的异常
-
GeneratorExit:生成器函数被关闭时引发的异常
-
Exception:大多数内置异常的基类
-
StopIteration:用于迭代器的异常,表示迭代完成
-
StopAsyncIteration:用于异步迭代器的异常,表示迭代完成
-
ArithmeticError:所有算术异常的基类
-
FloatingPointError:浮点数运算异常
-
OverflowError:数值运算结果太大而无法表示
-
ZeroDivisionError:除数为零
-
-
AssertionError:断言语句(assert)失败
-
AttributeError:访问对象不存在的属性
-
BufferError:缓冲区操作失败
-
EOFError:没有读取到数据
-
ImportError:无法导入模块或模块不存在
- ModuleNotFoundError:无法找到模块
-
LookupError:无法找到值的基类
-
IndexError:索引超出序列范围
-
KeyError:字典中不存在键
-
-
MemoryError:内存耗尽
-
NameError:名称未声明或不存在
- UnboundLocalError:尝试访问未初始化的本地变量
-
OSError:由操作系统引起的异常
-
BlockingIOError:I/O操作无法立即完成
-
FileExistsError:文件已存在
-
FileNotFoundError:文件或目录不存在
-
InterruptedError:系统调用被中断
-
IsADirectoryError:尝试对目录进行文件操作
-
NotADirectoryError:尝试对非目录进行目录操作
-
PermissionError:没有适当的权限
-
ProcessLookupError:指定的进程不存在
-
TimeoutError:操作超时
-
-
ReferenceError:弱引用(weak reference)操作失败
-
RuntimeError:通用运行时异常的基类
-
NotImplementedError:尚未实现的方法
-
RecursionError:递归调用层数过多
-
-
SyntaxError:语法错误
- IndentationError:缩进错误
-
SystemError:解释器内部错误
-
TypeError:类型不匹配
-
ValueError:值不符合预期
- UnicodeError:Unicode相关的错误
-
Warning:警告的基类
-
DeprecationWarning:过时警告
-
PendingDeprecationWarning:即将过时警告
-
RuntimeWarning:运行时警告
-
SyntaxWarning:语法警告
-
UserWarning:用户自定义警告
-
FutureWarning:未来可能会改变的警告
-
ImportWarning:导入模块时的警告
-
UnicodeWarning:Unicode相关的警告
-
BytesWarning:bytes和bytearray相关的警告
-
-
-
请注意,Python的不同版本可能会有所不同。上面的列表只是Python 3.10版本中内置异常类型的一个示例,其他版本可能会有所不同。
八、总结
在Python中,异常处理是一种强大的机制,可用于捕获和处理错误。我们可以使用try
和except
语句来捕获异常,并在出现异常时执行特定的代码块。我们还可以使用finally
语句在try
语句块完成后执行一些代码。如果我们想捕获特定类型的异常,我们可以使用多个except
语句,并指定每个异常类型。我们还可以定义自己的异常类,并使用raise
语句引发自定义异常。最后,我们还可以使用assert
语句检查条件,并在条件不满足时引发异常。通过使用这些异常处理技术,我们可以编写更健壮、可维护和可靠的Python代码。
系列文章
🔥 Python 基础(一):初识 Python
🔥 Python 基础(二):搭建 Python 开发环境
🔥 Python 基础(三):Python 集成开发工具 IDLE
🔥 Python 基础(四):基础语法
🔥 Python 基础(五):变量与常量
🔥 Python 基础(六):基本数据类型
🔥 Python 基础(七):常用运算符
🔥 Python 基础(八):流程控制语句
🔥 Python 基础(九):列表
🔥 Python 基础(十):元组
🔥 Python 基础(十一):集合
🔥 Python 基础(十二):字典
🔥 Python 基础(十三):函数
🔥 Python 基础(十四):类和对象
🔥 Python 基础(十五):模块
🔥 Python 基础(十六):包
🔥 Python 基础(十七):库
热门专栏
👍 《Python入门核心技术》
👍 《IDEA 教程:从入门到精通》
👍 《Java 教程:从入门到精通》
👍 《MySQL 教程:从入门到精通》
👍 《大数据核心技术从入门到精通》
相关文章:

Python 基础(十八):异常处理
❤️ 博客主页:水滴技术 🌸 订阅专栏:Python 入门核心技术 🚀 支持水滴:点赞👍 收藏⭐ 留言💬 文章目录 一、异常是什么?二、异常处理的基本语法三、捕获特定的异常类型四、finall…...

iTOP-RK3568开发板Docker 安装 Ubuntu 18.04
Docker 下载安装 Ubuntu18.04,输入以下命令: sudo apt update docker pull ubuntu:18.04 切换 Shell 到 Ubuntu 18.04,输入以下命令: docker container run -p 8000:3000 -it ubuntu:18.04 /bin/bash -p 参数:容器的…...

FFmpeg AVFilter的原理(三)- filter是如何被驱动的
首先上官方filter的链接:https://ffmpeg.org/ffmpeg-filters.html 关于filter命令行:FFmpeg-4.0 的filter机制的架构与实现.之一 Filter原理 1、下面是一个avfilter的graph 上图是ffmpeg中doc/examples中filtering_video.c案例的示意图。 特别注意上面蓝…...

ARM day8 key1/2/3led
key_led.h #ifndef _KEY_H_ #define _KEY_H_#include "stm32mp1xx_rcc.h" #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_exti.h" #include "stm32mp1xx_gic.h"//EXTI编号 typedef enum {EXTI0,EXTI1,EXTI2,EXTI3,EXTI4,EXTI5,…...

windows 系统安装sonarqube
SonarQube是一种自动代码审查工具,用于检测代码中的错误,漏洞和代码异味。它可以与您现有的工作流程集成,以便在项目分支和拉取请求之间进行连续的代码检查。 官方网站: https://www.sonarqube.org/ 1. 使用前提条件 运行SonarQ…...

Unity噪声图生成(编辑器扩展)
最近发现项目里很多shader都需要噪声图,(shadergraph中有自己的噪声图生成)当遇到需要噪声图时去寻找很麻烦,所以从网上查阅资料编写了一个Unity扩展的噪声图生成。 Perlin噪声 Perlin噪声是一种渐变噪声算法,由Ken …...
http-为什么文件上传要转成Base64
# 前言 最近在开发中遇到文件上传采用Base64的方式上传,记得以前刚开始学http上传文件的时候,都是通过content-type为multipart/form-data方式直接上传二进制文件,我们知道都通过网络传输最终只能传输二进制流,所以毫无疑问他们本…...

htmlCSS-----定位
目录 前言 定位 分类和取值 定位的取值 1.相对定位 2.绝对位置 元素居中操作 3.固定定位 前言 今天我们来学习html&CSS中的元素的定位,通过元素的定位我们可以去更好的将盒子放到我们想要的位置,下面就一起来看看吧! 定位 定位posi…...
腾讯云大数据型CVM服务器实例D3和D2处理器CPU型号说明
腾讯云服务器CVM大数据型D3和D2处理器型号,大数据型D3云服务器CPU采用2.5GHz Intel Xeon Cascade Lake 处理器,大数据型D2云服务器CPU采用2.4GHz Intel Xeon Skylake 6148 处理器。腾讯云服务器网分享云服务器CVM大数据型CPU型号、处理器主频性能&#x…...

计算机科学cs/电子信息ei面试准备——数学基础/线性代数复习
1. 中值定理 中值定理是反映函数与导数之间联系的重要定理,也是微积分学的理论基础,在许多方面它都有重要的作用,在进行一些公式推导与定理证明中都有很多应用。中值定理是由众多定理共同构建的,其中拉格朗日中值定理是核心&…...
极速查找(2)-算法分析
篇前小言 本篇文章是对查找(1)的续讲线性索引查找 线性索引查找(Linear Index Search)是一种基于索引的查找算法。它在数据集合中创建一个索引 结构,然后使用该索引结构来加快对目标元素的查找。 线性索引是一种在数…...

flask路由添加参数
flask路由添加参数 在 Flask 中,可以通过两种方式在路由中添加参数:在路由字符串中直接指定参数,或者通过 request 对象从请求中获取参数。 在路由字符串中指定参数:可以将参数直接包含在路由字符串中。参数可以是字符串、整数、…...

网络安全系统教程+学习路线(自学笔记)
一、什么是网络安全 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域,都有攻与防两面…...
23. 合并 K 个升序链表
题目描述 给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合并后的链表。 示例 1: 输入:lists [[1,4,5],[1,3,4],[2,6]] 输出:[1,1,2,3,4,4,5,6] 解释:链表数组…...

Nexus3部署、配置+SpringBoot项目Demo
Docker部署Nexus 搜索Nexus3镜像:[rootlocalhost ~]# docker search nexus 拉取Nexus3镜像:[rootlocalhost ~]# docker pull sonatype/nexus3 启动Nexus3前查看虚拟机端口是否被占用:[rootlocalhost ~]# netstat -nultp 通过Docker Hub查看安…...

linux下用docker安装mysql
1.mysql Docker镜像 docker pull mysql:[版本号 或 latest]例:docker pull mysql:5.7 2.查看拉取的docker镜像 docker images3.设置 Docker 卷 docker volume create mysql-data列出 Docker 已知的所有卷 docker volume ls4.运行一个 MySQL Docker 容器 docke…...

Vue - 可视化用户角色、菜单权限、按钮权限配置(动态获取菜单路由)
GitHub Demo 地址 在线预览 前言 关于动态获取路由已在这里给出方案 Vue - vue-admin-template模板项目改造:动态获取菜单路由 这里是在此基础上添加了系统管理模块,包含用户管理,角色管理,菜单管理,字典管理…...
hive库操作示例
hive库操作示例 1、常规表 创建数据库 CREATE DATABASE mydatabase;使用数据库 USE mydatabase;创建表 CREATE TABLE mytable (id INT,name STRING,age INT ) ROW FORMAT DELIMITED FIELDS TERMINATED BY , STORED AS TEXTFILE;插入数据 INSERT INTO TABLE mytable VALUE…...

LeetCode第 N 个泰波那契数 (认识动态规划)
认识动态规划 编写代码代码空间优化 链接: 第 N 个泰波那契数 编写代码 class Solution { public:int tribonacci(int n) {if(n 0){return 0;}else{if(n 1 || n 2)return 1;}vector<int> dp(n 1);dp[0] 0;dp[1] 1;dp[2] 1;for(int i 3;i < n;i){dp[i] dp[i-3]…...
线程安全问题(内存可见性)
导致的原因 内存可见性问题的出现主要是因为编译器优化多线程导致的 示例代码 package 线程安全问题;import java.util.Scanner;/*** Created with IntelliJ IDEA.* Description:* User: wuyulin* Date: 2023-07-26* Time: 13:49*/ public class Demo2 {private volatile sta…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...

Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...

visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...

HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...

Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...