Python入门Day6.1:异常处理

一、什么是异常(Exception)?

异常是指程序运行过程中出现的错误情况。比如:

  • 打开一个不存在的文件
  • 0作为除数
  • 列表索引越界
  • 类型转换失败

二、基本结构:try...except

try:# 可能出错的代码
except 错误类型:# 出错时执行的代码

示例:

try:x = 10 / 0  # 除零错误
except ZeroDivisionError:print("不能除以0")

输出:

不能除以0

三、完整结构详解

try:# 尝试执行的代码块
except 错误类型1:# 捕获错误类型1后的处理
except 错误类型2:# 捕获错误类型2后的处理
else:# 没有异常时执行
finally:# 无论是否有异常都执行(如关闭文件/资源)

示例:

try:num = int(input("请输入一个整数:"))result = 10 / num
except ValueError:print("请输入有效的整数")
except ZeroDivisionError:print("不能输入0")
else:print("结果是:",result)
finally:print("程序结束")

四、常见异常类型及用途

异常类型触发场景
ZeroDivisionError除以零
ValueError类型转换失败,如 int("abc")
IndexError索引超出列表范围
KeyError字典中访问不存在的键

FileNotFoundError

打开一个不存在的文件
TypeError操作类型不兼容

五、常见实用技巧和场景

1.捕获多个异常

try:a = int("abc")b = 10 /0
except (ValueError,ZeroDivisionError) as e:print("出错啦",e)

2.不确定错误类型,先写Exception

try:#  复杂逻辑do_something()
except Exception as e:print("出现未知错误",e)

注意:不要滥用Exception,否则可能掩盖真正的bug

3.使用finally清理资源

try:file = open("data.txt","r")content = file.read()
except FileNotFound:print("文件未找到")
finally:file.close()print("文件关闭")

4.自定义函数内使用try-except

def safe_divide(x,y):try:return x/yecxept ZeroDivisionError:return "不能除以0"print(safe_divide(10,0))  #输出:不能除以0

六、自定义异常类(Custom Exceptions)

有时候内置异常不能准确表达业务逻辑,此时可以自定义异常类

语法:

class 自定义异常名(Exception):pass

示例:

#  定义一个自定义异常类,继承自内置的Exception类
class PasswordTooShortError(Exception):"""密码长度太短的异常"""pass#  定义一个检查密码的函数
def check_password(pwd):#如果密码长度小于6,就主动抛出自定义异常if len(pwd)<6:raise PasswordTooShortError("密码长度不能少于6位")# 使用try-except捕获自定义异常
try:check_password("abc")
except PasswordTooShortError as e:#捕获到自定义异常后,打印错误信息print("发生错误:",e)

七、使用raise主动抛出异常

raise可以手动触发异常,让函数调用者知道出错了

基本用法:

raise 异常类型("错误信息")

示例:

# 定义一个除法函数,带参数检查
def divide(x,y):# 如果除数是0,就主动抛出除零异常if y == 0:rasie ZeroDivisionError("除数不能为0")# 否则返回除法结果return x/y#  使用try-except 捕获异常
try:result = divide(10,0)    
except ZeroDivisionError as e:    #重命名异常,以便于后续再输出错误信息print("错误",e)

八、异常链(raise...from...)

在某些场景中,一个异常是由另一个异常引起的,为了因果链,可以使用:

raise 新异常 from 原始异常

示例:

# 定义一个读取配置文件的函数
def read_config(path):try:# 试图打开并读取文件内容with open(path) as f:return f.read()except FileNotFoundError as e:# 如果文件找不到,抛出新的RuntimeError,并保留原始异常信息raise RuntimeError("配置文件读取失败") from e# 使用try-except捕获RuntimeError
try:read_config("no_such_file.cfg")    #尝试读取一个不存在的文件
except RuntimeError as e:#打印新的异常信息print("RuntimeError:",e)#打印原始异常的详细原因(通过异常链追踪)print("原始原因:",e.__casuse__)

九、高级技巧总结表

技巧说明示例代码
自定义异常类用于表达特定业务逻辑错误class MyError(Exception):..
raise抛出异常控制程序流,校验参数raise ValueError("不合法")
raise from原始异常保留原始异常上下文raise NewError from old_error
异常嵌套处理不同层次处理不同错误外层用broad except,内层细分异常处理
异常日志记录结合logging模块记录错误信息logging.exception(e)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++中的标准模板(STL)

C中的核心标准模板包含&#xff1a;容器、迭代器、算法、函数对象、适配器。 1.容器 容器提供了各种数据结构&#xff0c;包括向量(vector)、链表(list)、队列(queue)、栈(stack)、集合(set)、映射(map)等&#xff0c;可以根据实际需求选择合适的容器。 容器分为三大类&…

excel 待办日历软件(需要宏)特别推荐

Excel待办日历软件是一款基于Excel表格的日程管理工具&#xff0c;能够帮助用户更高效地管理待办事项和日程安排。用户可以在软件中创建不同的任务列表&#xff0c;以便更好地进行管理和跟踪。软件还提供了日历视图&#xff0c;用户可以直观地查看和安排每日的任务&#xff0c;…

激活函数-sigmoid、tanh、relu、softmax对比

激活函数是神经网络的核心组件&#xff0c;用于引入非线性特性&#xff0c;使网络能够学习复杂模式。以下从定义、作用、分类及应用场景进行详细解析&#xff1a; &#x1f50d; ​​一、定义​​ 激活函数&#xff08;Activation Function&#xff09;是作用于神经元输出的​…

三步走实现嵌入式硬件与软件开发

目录 ✅ 一、嵌入式硬件与软件的边界(为你后面每阶段安排任务打基础) ✅ 二、三阶段开发策略规划(以你的三步走为主线) 📍阶段1:确定能做 → 外包技术顾问协助选型 + 需求拆解 + 采购建议 适用角色 关键目标 如何管理? 工具推荐 📍阶段2:会做一些 → 小范围…

ubuntu运行cursor

一.CURSOR官网下载AppImage文件 https://www.cursor.com/en/download 二、解压 AppImage 绕过挂载机制 解决&#xff1a;默认使用Cursor.AppImage 会自动挂载临时目录在/tmp目录下&#xff0c;出现没有权限挂载的报错问题 若挂载点仍不可写&#xff0c;直接解压 AppImage 运…

PTA天梯赛L1 071-080题目解析

目录 1.L1-071 前世档案 2.L1-072 刮刮彩票 3.L1-073 人与神 4.L1-074 两小时学完C语言 5.L1-075 强迫症 6.L1-076 降价提醒机器人 7.L1-077 大笨钟的心情 8.L1-078 吉老师的回归 9.L1-079 天梯赛的善良 10.L1-080 乘法口诀数列 1.L1-071 前世档案 解析&#xff1a;…

git常用操作 --- idea编译器 --- 公司实战版

前言 虽然git的命令方式很灵活,但是还是不够人性化,不够方便。 如果对git操作不熟练特别容易犯迷,可能敲一会命令就不知道当前在干什么了,下一步要干什么。 下面,我将演示在Java开发中使用最常用最经典的idea编译器来进行git操作,非常人性化和方便。 如果没有安装git和初始…

window显示驱动开发—流输出阶段

流输出 (SO) 阶段可以在这些顶点到达光栅器之前将顶点流式传输到内存。 流输出的运行方式类似于管道中的点击。 即使数据继续向下流向光栅器&#xff0c;也可以打开此点击。 通过流输出发送的数据连接到缓冲区。 这些缓冲区可以在后续传递上作为管道输入进行循环。 流输出的一…

备份docker desktop中的opengauss数据库

文章目录 备份docker desktop中的opengauss数据库一、前提条件二、备份步骤三、注意事项四、自动化备份&#xff08;可选&#xff09;五、验证备份 备份docker desktop中的opengauss数据库 ​ 以下是在 Docker Desktop 中备份 OpenGauss 数据库&#xff08;以你的环境为例&…

实时中值滤波 + 低通滤波 示例程序(STM32环境)

一、功能概述 本示例实现两个滤波器&#xff1a; 中值滤波器&#xff08;Median Filter&#xff09;&#xff1a;对短期异常值&#xff08;如尖峰噪声&#xff09;有良好的抑制能力&#xff1b;低通滤波器&#xff08;Low-Pass Filter&#xff09;&#xff1a;对数据进行平滑…

AtCoder Beginner Contest 409 题解

本文为AtCoder Beginner Contest 409 的详细题解 目录 题目A: 题目大意: 解题思路: 代码(C): 题目B: 题目大意: 解题思路: 代码(C): 题目C: 题目大意: 解题思路: 代码(C): 题目D: 题目大意: 解题思路: 代码(C): 题目E: 题目大意: 解题思路: 代码(C): 题目A…

Spring @Environment 典型用法

简单说&#xff1a;Spring 里没有直接叫 Environment 的注解&#xff0c;更准确说常用的是 Autowired 注入 Environment 对象&#xff0c;或者结合 Value 配合 Environment 读取配置 。 支持从以下来源读取&#xff1a; 1、application.properties / .yaml 2、JVM 参数&#xf…

【集合与结构体】5.2(课本题)总结代码

ds老师产物&#xff0c;纯为期末复习&#xff0c;自用。 题目1 编写程序&#xff0c;将一个整型变量右移 4 位&#xff0c;并以二进制数形式输出该整数在移位前和移位后的数值。 //观察系统填补空缺的数位情况 代码解答 #include <iostream>//编写程序&#xff0c;将一个…

16.max/min最大最小值函数

1.基本使用 max/min函数返回满足where条件的一列的最大/最小值。 select max(column_name)|min(column_name) from table_namewhere where_definition 示例&#xff1a; ①求班级总分的最高分 #求班级总分的最高分 SELECT MAX(math_scorechinese_scoreenglish_score)AS 总分…

需要做一款小程序,用来发券,后端如何进行设计能够保证足够安全?

温馨提示&#xff1a;本文由ai生成&#xff0c;请辨别阅读&#xff0c;本文仅提供一种思考的方式和设计思路 设计一个安全的后端系统&#xff0c;用于发放优惠券的小程序&#xff0c;需要考虑多个安全层面&#xff0c;包括身份验证、数据安全、API 安全、以及防止常见攻击&…

ACM设计平台-核心模块解析-赵家康

负责模块解析-赵家康 一、Login.vue 功能逻辑、数据绑定、表单验证、与后端交互 Vue 登录页面的代码设计 代码功能概览 代码实现了一个典型的登录页功能&#xff0c;核心包括&#xff1a; 表单输入&#xff08;学号、用户名、密码、验证码&#xff09; 验证码生成与校验 勾…

在 VMware (WM) 虚拟机上安装的 Ubuntu 22.04 分配了 20GB 磁盘,但仅使用 10GB 就显示 “空间已满“

可能原因及解决方案 虚拟机磁盘未实际扩容&#xff08;仅调整了虚拟大小&#xff09; 现象&#xff1a;在 VMware 里调整了磁盘大小&#xff08;如 20GB → 50GB&#xff09;&#xff0c;但 Ubuntu 内部仍只识别 10GB。 原因&#xff1a;VMware 调整的是虚拟磁盘上限&#xf…

初学STM32全功能按键非阻塞式实现和强化

其实笔者以前学51的时候按键功能就包含非阻塞式的&#xff0c;而且还包括矩阵按键的非组塞式按键实现。开关的长短键功能笔者在之前的51博文中笔者自己尝试写过&#xff0c;功能是有了但写的其实很混乱&#xff0c;几乎没有移植的价值。这次江科大刚好出了新的教程&#xff0c;…

【网络原理】网络原理简单认识 —— 内含网络通信基础、五元组、网络协议(OSI 七层协议、TCP/IP 五层(或四层)协议)、封装和分用

目录 1. 网络互连 1.1 局域网LAN 1.2 广域网WAN 2 网络通信基础 2.1 IP地址 2.2 端口号 2.3 网络协议 3. 五元组 4. 协议分层 4.1 OSI 七层网络模型 4.2 TCP/IP 五层&#xff08;或四层&#xff09;网络模型 4.3 网络设备所在分层(经典笔试题) 5. 网络数据传输的基…

嵌入式之硬件学习(三)通信方式、串口通信

目录 一、通信种类 1、并行通信 2、串行通信 3、单工模式(Simplex Communication) 4、半双工通信(Half-Duplex Communication) 5、全双工通信(Full-Duplex Communication) 6、串行的异步通信与同步通信 &#xff08;1&#xff09;异步通信 &#xff08;2&#xff09;同…