Python学习计划——4.3常见的异常类型和处理方法

在编写程序时,难免会遇到各种异常情况。Python 提供了一系列内置的异常类型,可以用于捕获和处理不同类型的错误。了解这些常见的异常类型有助于编写健壮的代码。

1. 常见的异常类型
IndexError

当尝试访问列表、元组或其他序列中不存在的索引时,会引发 IndexError

my_list = [1, 2, 3]
try:print(my_list[3])
except IndexError as e:print(f"发生异常:{e}")
KeyError

当尝试访问字典中不存在的键时,会引发 KeyError

my_dict = {'a': 1, 'b': 2}
try:print(my_dict['c'])
except KeyError as e:print(f"发生异常:{e}")
ValueError

当函数接收到的参数类型不正确时,会引发 ValueError

try:number = int("abc")
except ValueError as e:print(f"发生异常:{e}")
TypeError

当操作或函数应用于错误类型的对象时,会引发 TypeError

try:result = "abc" + 123
except TypeError as e:print(f"发生异常:{e}")
ZeroDivisionError

当尝试除以零时,会引发 ZeroDivisionError

try:result = 10 / 0
except ZeroDivisionError as e:print(f"发生异常:{e}")
FileNotFoundError

当尝试打开不存在的文件时,会引发 FileNotFoundError

try:with open('non_existent_file.txt', 'r') as file:content = file.read()
except FileNotFoundError as e:print(f"发生异常:{e}")
2. 捕获多个异常

可以在一个 try 语句中捕获多个异常,并分别处理它们。

try:x = int(input("请输入一个数字:"))y = 10 / xprint(y)
except ValueError as e:print(f"输入值必须是数字。异常信息:{e}")
except ZeroDivisionError as e:print(f"除数不能为零。异常信息:{e}")
3. 捕获所有异常

可以使用 except Exception 来捕获所有异常,处理未知错误。

try:result = 10 / 0
except Exception as e:print(f"发生异常:{e}")
4. 抛出异常

可以使用 raise 关键字手动引发异常,常用于验证函数参数。

def check_positive(number):if number <= 0:raise ValueError("数字必须是正数")return numbertry:check_positive(-10)
except ValueError as e:print(f"发生异常:{e}")
5. 自定义异常

可以通过继承 Exception 类来自定义异常。

class CustomError(Exception):passdef check_value(value):if value < 0:raise CustomError("值不能为负数")try:check_value(-5)
except CustomError as e:print(f"发生异常:{e}")
可运行的Python案例

下面是一个完整的Python程序,演示了常见异常类型的捕获和处理。

# 处理 IndexError 异常
my_list = [1, 2, 3]
try:print(my_list[3])
except IndexError as e:print(f"IndexError 发生:{e}")# 处理 KeyError 异常
my_dict = {'a': 1, 'b': 2}
try:print(my_dict['c'])
except KeyError as e:print(f"KeyError 发生:{e}")# 处理 ValueError 异常
try:number = int("abc")
except ValueError as e:print(f"ValueError 发生:{e}")# 处理 TypeError 异常
try:result = "abc" + 123
except TypeError as e:print(f"TypeError 发生:{e}")# 处理 ZeroDivisionError 异常
try:result = 10 / 0
except ZeroDivisionError as e:print(f"ZeroDivisionError 发生:{e}")# 处理 FileNotFoundError 异常
try:with open('non_existent_file.txt', 'r') as file:content = file.read()
except FileNotFoundError as e:print(f"FileNotFoundError 发生:{e}")# 捕获多个异常
try:x = int(input("请输入一个数字:"))y = 10 / xprint(y)
except ValueError as e:print(f"输入值必须是数字。异常信息:{e}")
except ZeroDivisionError as e:print(f"除数不能为零。异常信息:{e}")# 捕获所有异常
try:result = 10 / 0
except Exception as e:print(f"发生异常:{e}")# 手动引发异常
def check_positive(number):if number <= 0:raise ValueError("数字必须是正数")return numbertry:check_positive(-10)
except ValueError as e:print(f"手动引发的异常:{e}")# 自定义异常
class CustomError(Exception):passdef check_value(value):if value < 0:raise CustomError("值不能为负数")try:check_value(-5)
except CustomError as e:print(f"CustomError 发生:{e}")

可以将上面的代码复制到你的IDE中运行,观察程序的输出。这个案例综合了常见异常类型及其处理方法,帮助你理解和掌握这些操作。继续加油,学习Python会越来越有趣和有用!

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

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

相关文章

等保测评与供应链安全:确保整个生态链的安全无虞

在当今数字化时代&#xff0c;信息技术的飞速发展极大地推动了政府和企业单位的数字化转型。然而&#xff0c;这一进程也伴随着潜在的信息安全威胁&#xff0c;尤其是在供应链环节。等保测评&#xff08;信息安全等级保护测评&#xff09;与供应链安全管理的结合&#xff0c;成…

本地部署VMware ESXi服务实现无公网IP远程访问管理服务器

文章目录 前言1. 下载安装ESXi2. 安装Cpolar工具3. 配置ESXi公网地址4. 远程访问ESXi5. 固定ESXi公网地址 前言 在虚拟化技术日益成熟的今天&#xff0c;VMware ESXi以其卓越的性能和稳定性&#xff0c;成为了众多企业构建虚拟化环境的首选。然而&#xff0c;随着远程办公和跨…

CCS光源的高输出TH2系列平面光源

光源在机器视觉系统中起着重要作用&#xff0c;不同环境、场景及应用合适光源都不一样&#xff0c;今天我们来看看高输出TH2系列平面光源。它可以对应高速化的生产线&#xff0c;为提高生产效率做出贡献。 TH2系列光源的特点&#xff1a; 1、实现了更高一级的高亮度 实现了更…

谷粒商城实战笔记-56~57-商品服务-API-三级分类-修改-拖拽功能完成

文章目录 一&#xff0c;56-商品服务-API-三级分类-修改-拖拽功能完成二&#xff0c;57-商品服务-API-三级分类-修改-批量拖拽效果1&#xff0c;增加按钮2&#xff0c;多次拖拽一次保存完整代码 在构建商品服务API中的三级分类修改功能时&#xff0c;拖拽排序是一个直观且高效的…

Java | Leetcode Java题解之第260题只出现一次的数字III

题目&#xff1a; 题解&#xff1a; class Solution {public int[] singleNumber(int[] nums) {int xorsum 0;for (int num : nums) {xorsum ^ num;}// 防止溢出int lsb (xorsum Integer.MIN_VALUE ? xorsum : xorsum & (-xorsum));int type1 0, type2 0;for (int n…

Prometheus配置alertmanager告警

1、拉取镜像并运行 1、配置docker镜像源 [rootlocalhost ~]# vim /etc/docker/daemon.json {"registry-mirrors": ["https://dfaad.mirror.aliyuncs.com"] } [rootlocalhost ~]# systemctl daemon-reload [rootlocalhost ~]# systemctl restart docker2、…

刷题了: 151.翻转字符串里的单词 |卡码网:55.右旋转字符串

151.翻转字符串里的单词 题目链接:https://leetcode.cn/problems/reverse-words-in-a-string/description/ 文章讲解:https://programmercarl.com/0151.%E7%BF%BB%E8%BD%AC%E5%AD%97%E7%AC%A6%E4%B8%B2%E9%87%8C%E7%9A%84%E5%8D%95%E8%AF%8D.html 视频讲解:https://www.bilibi…

vue2之jessibuca视频插件使用教程

vue2之jessibuca视频插件使用教程 jessibuca简介前期准备下载相关jsvue index.html文件引入 组件封装使用小知识 引入iconfont jessibuca简介 Jessibuca是一款开源的纯H5直播流播放器&#xff0c;通过Emscripten将音视频解码库编译成Js&#xff08;ams.js/wasm)运行于浏览器之中…

PHP基础语法(五)

一、定义语法 1、索引数组 2、php5.4之后简化的语法 3、关联数组 4、多维数组 $colors array("Red", "Green", "Blue");$colors ["Red", "Green", "Blue"];$person array("name" > "Jo…

基于PyCharm在Windows系统上远程连接Linux服务器中Docker容器进行Python项目开发与部署

文章目录 摘要项目结构项目开发项目上线参考文章 摘要 本文介绍了如何在Windows 10系统上使用PyCharm专业版2024.1&#xff0c;通过Docker容器在阿里云CentOS 7.9服务器上进行Python项目的开发和生产部署。文章详细阐述了项目结构的搭建、PyCharm的使用技巧、以及如何将开发项…

Superset二次开发之Dashboard状态变更源码解读

接口PUTapi/v1/dashboard/<dashboard_ID>前端文件 superset-frontend\src\dashboard\components\PublishedStatus\index.jsx 69行 togglePublished() togglePublished() { this.props.savePublished(this.props.dashboardId, !this.props.isPublished); } …

基于深度学习的医学影像分类

基于深度学习的医学影像分类是利用深度学习模型对医学影像&#xff08;如X光片、CT、MRI等&#xff09;进行自动分类&#xff0c;以辅助医生进行疾病诊断和治疗决策。以下是对这一领域的系统介绍&#xff1a; 1. 任务和目标 医学影像分类的主要任务和目标包括&#xff1a; 疾…

12.Spring事务和事务传播机制

文章目录 1.为什么需要事务2.Spring 中事务的实现2.1 MySQL 中的事务使⽤2.2 Spring 编程式事务2.3 Spring 声明式事务&#xff08;自动&#xff09;2.3.1 Transactional 作⽤范围2.3.2 Transactional 参数说明2.3.3 注意事项2.3.4 Transactional ⼯作原理 3.事务隔离级别3.1 事…

vue+element的table合并单元格(竖着合并行)及合计行添加并计算

1 效果: 代码分析: 1 表格头配置: 2 懒得写的:自己复制吧 <el-table:data"tableData"style"width: 98%":height"height"v-loading"isLoading"stripe"false" :span-method"objectSpanMethod"show-summary:summ…

c++ 线程

在 C 中&#xff0c;std::thread 构造函数可以用于将参数传递给线程。这里是一个基本的示例&#xff0c;展示了如何使用 std::thread 来传递参数&#xff1a; #include <iostream> #include <thread>// 定义一个被线程调用的函数 void threadFunc(int arg1, doubl…

C++多线程编程中的锁详解

在现代软件开发中&#xff0c;多线程编程是提升应用程序性能和响应能力的重要手段。然而&#xff0c;多线程编程也带来了数据竞争和死锁等复杂问题。为了确保线程间的同步和共享数据的一致性&#xff0c;C标准库提供了多种锁机制。 1. std::mutex std::mutex是最基础的互斥锁…

视图、存储过程、触发器

一、视图 视图是从一个或者几个基本表&#xff08;或视图&#xff09;导出的表。它与基 本表不同&#xff0c;是一个虚表&#xff0c;视图只能用来从查询&#xff0c;不能做增删改(虚拟的表) 1.创建视图 创建视图的语法&#xff1a; create view 视图名【view_xxx / v_xxx】 a…

深入理解MySQL锁机制与性能优化:详解记录锁、间隙锁、临键锁及慢SQL查询分析

1. 事务隔离和锁机制详解 记录锁 第一种情况,当我们对于唯一性的索引(包括唯一索引和主键索引)使用等值查询,精准匹配到一条记录的时候,这个时候使用的就是记录锁。 比如 where id = 1 4 7 10。 间隙锁 第二种情况,当我们查询的记录不存在,无论是用等值查询还是范围…

如何使用 API 查看极狐GitLab 镜像仓库中的镜像?

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab &#xff1a;https://gitlab.cn/install?channelcontent&utm_sourcecsdn 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署…

Thinkphp开发文档二次整理版

基础部分 安装 环境要求 ​ *php>7.1.0 命令下载 通过Composer进行下载&#xff0c;操作步骤下载软件 phpstudy --->点击软件管理 --->安装Composer --->再点击网站 --->点击管理 --->点击Composer --->复制如下命令代码&#xff1a; ​ 稳定版&…