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

Python 基础(十八):异常处理

在这里插入图片描述

❤️ 博客主页:水滴技术
🌸 订阅专栏:Python 入门核心技术
🚀 支持水滴:点赞👍 + 收藏⭐ + 留言💬

文章目录

  • 一、异常是什么?
  • 二、异常处理的基本语法
  • 三、捕获特定的异常类型
  • 四、finally语句
  • 五、自定义异常
  • 六、assert语句
  • 七、Python内置异常
  • 八、总结
  • 系列文章
  • 热门专栏


大家好,我是水滴~~

Python是一种易学易用的编程语言,但即使是经验丰富的开发人员也会偶尔遇到错误和异常。在这篇教程中,我们将深入讨论Python中的异常处理。

一、异常是什么?

在Python中,当发生错误或意外情况时,会引发异常。异常是Python中的一种错误处理机制,它允许程序员捕获和处理错误,以避免程序崩溃。

Python中的异常通常是由错误的语法或运行时错误引起的,例如:

  • 语法错误(Syntax Error):在编写代码时,违反了Python语法规则。

  • 运行时错误(Runtime Error):这是在程序运行时发生的错误,例如尝试使用未定义的变量或调用不存在的函数等。

二、异常处理的基本语法

在Python中,我们可以使用tryexcept语句来捕获和处理异常。try语句用于包含可能引发异常的代码块,而except语句用于定义处理异常的代码块。

以下是tryexcept语句的基本语法:

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中,异常处理是一种强大的机制,可用于捕获和处理错误。我们可以使用tryexcept语句来捕获异常,并在出现异常时执行特定的代码块。我们还可以使用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 基础(十八):异常处理

❤️ 博客主页&#xff1a;水滴技术 &#x1f338; 订阅专栏&#xff1a;Python 入门核心技术 &#x1f680; 支持水滴&#xff1a;点赞&#x1f44d; 收藏⭐ 留言&#x1f4ac; 文章目录 一、异常是什么&#xff1f;二、异常处理的基本语法三、捕获特定的异常类型四、finall…...

iTOP-RK3568开发板Docker 安装 Ubuntu 18.04

Docker 下载安装 Ubuntu18.04&#xff0c;输入以下命令&#xff1a; sudo apt update docker pull ubuntu:18.04 切换 Shell 到 Ubuntu 18.04&#xff0c;输入以下命令&#xff1a; docker container run -p 8000:3000 -it ubuntu:18.04 /bin/bash -p 参数&#xff1a;容器的…...

FFmpeg AVFilter的原理(三)- filter是如何被驱动的

首先上官方filter的链接&#xff1a;https://ffmpeg.org/ffmpeg-filters.html 关于filter命令行&#xff1a;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是一种自动代码审查工具&#xff0c;用于检测代码中的错误&#xff0c;漏洞和代码异味。它可以与您现有的工作流程集成&#xff0c;以便在项目分支和拉取请求之间进行连续的代码检查。 官方网站&#xff1a; https://www.sonarqube.org/ 1. 使用前提条件 运行SonarQ…...

Unity噪声图生成(编辑器扩展)

最近发现项目里很多shader都需要噪声图&#xff0c;&#xff08;shadergraph中有自己的噪声图生成&#xff09;当遇到需要噪声图时去寻找很麻烦&#xff0c;所以从网上查阅资料编写了一个Unity扩展的噪声图生成。 Perlin噪声 Perlin噪声是一种渐变噪声算法&#xff0c;由Ken …...

http-为什么文件上传要转成Base64

# 前言 最近在开发中遇到文件上传采用Base64的方式上传&#xff0c;记得以前刚开始学http上传文件的时候&#xff0c;都是通过content-type为multipart/form-data方式直接上传二进制文件&#xff0c;我们知道都通过网络传输最终只能传输二进制流&#xff0c;所以毫无疑问他们本…...

htmlCSS-----定位

目录 前言 定位 分类和取值 定位的取值 1.相对定位 2.绝对位置 元素居中操作 3.固定定位 前言 今天我们来学习html&CSS中的元素的定位&#xff0c;通过元素的定位我们可以去更好的将盒子放到我们想要的位置&#xff0c;下面就一起来看看吧&#xff01; 定位 定位posi…...

腾讯云大数据型CVM服务器实例D3和D2处理器CPU型号说明

腾讯云服务器CVM大数据型D3和D2处理器型号&#xff0c;大数据型D3云服务器CPU采用2.5GHz Intel Xeon Cascade Lake 处理器&#xff0c;大数据型D2云服务器CPU采用2.4GHz Intel Xeon Skylake 6148 处理器。腾讯云服务器网分享云服务器CVM大数据型CPU型号、处理器主频性能&#x…...

计算机科学cs/电子信息ei面试准备——数学基础/线性代数复习

1. 中值定理 中值定理是反映函数与导数之间联系的重要定理&#xff0c;也是微积分学的理论基础&#xff0c;在许多方面它都有重要的作用&#xff0c;在进行一些公式推导与定理证明中都有很多应用。中值定理是由众多定理共同构建的&#xff0c;其中拉格朗日中值定理是核心&…...

极速查找(2)-算法分析

篇前小言 本篇文章是对查找&#xff08;1&#xff09;的续讲线性索引查找 线性索引查找&#xff08;Linear Index Search&#xff09;是一种基于索引的查找算法。它在数据集合中创建一个索引 结构&#xff0c;然后使用该索引结构来加快对目标元素的查找。 线性索引是一种在数…...

flask路由添加参数

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

网络安全系统教程+学习路线(自学笔记)

一、什么是网络安全 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域&#xff0c;都有攻与防两面…...

23. 合并 K 个升序链表

题目描述 给你一个链表数组&#xff0c;每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中&#xff0c;返回合并后的链表。 示例 1&#xff1a; 输入&#xff1a;lists [[1,4,5],[1,3,4],[2,6]] 输出&#xff1a;[1,1,2,3,4,4,5,6] 解释&#xff1a;链表数组…...

Nexus3部署、配置+SpringBoot项目Demo

Docker部署Nexus 搜索Nexus3镜像&#xff1a;[rootlocalhost ~]# docker search nexus 拉取Nexus3镜像&#xff1a;[rootlocalhost ~]# docker pull sonatype/nexus3 启动Nexus3前查看虚拟机端口是否被占用&#xff1a;[rootlocalhost ~]# netstat -nultp 通过Docker Hub查看安…...

linux下用docker安装mysql

1.mysql Docker镜像 docker pull mysql:[版本号 或 latest]例&#xff1a;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模板项目改造&#xff1a;动态获取菜单路由 这里是在此基础上添加了系统管理模块&#xff0c;包含用户管理&#xff0c;角色管理&#xff0c;菜单管理&#xff0c;字典管理&#xf…...

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…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

基础测试工具使用经验

背景 vtune&#xff0c;perf, nsight system等基础测试工具&#xff0c;都是用过的&#xff0c;但是没有记录&#xff0c;都逐渐忘了。所以写这篇博客总结记录一下&#xff0c;只要以后发现新的用法&#xff0c;就记得来编辑补充一下 perf 比较基础的用法&#xff1a; 先改这…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...