AI教你学Python 第16天 : 错误与异常处理

Day 16:错误与异常处理

在编程中,错误与异常是不可避免的,尤其是在处理不确定的输入或外部条件(如文件操作、网络通信等)时。Python提供了丰富的异常处理机制,能够优雅地处理错误,保证程序的稳定性和用户体验。

学习目标

  1. 理解错误和异常的基本概念
  2. 学习如何使用tryexceptelsefinally语句处理异常
  3. 了解常见异常类型及其应用
  4. 掌握自定义异常的实现
  5. 实践项目:异常处理的小型应用

1. 错误和异常的基本概念

错误

错误是程序运行时的问题,通常可以分为两类:

  • 语法错误:缺少冒号、括号不匹配等。这类错误通常在代码运行前就会被Python解释器检测到。
  • 运行时错误:程序在运行时发生的错误,如除以零、访问不存在的索引等。

异常

异常是运行时错误的一种特殊情况,Python会抛出异常对象来通知开发者。异常处理结构能够捕获和处理这些异常,从而避免程序崩溃。

2. 使用tryexcept处理异常

异常处理机制的基本结构如下:

try:# 可能会引发异常的代码块
except ExceptionType:# 处理异常的代码
else:# 如果没有异常,执行的代码
finally:# 无论有没有异常,都会执行的代码

示例代码

try:x = int(input("请输入一个数字:"))print(10 / x)
except ValueError:print("输入无效,请输入一个数字。")
except ZeroDivisionError:print("不能除以零!")
else:print("计算成功!")
finally:print("程序结束。")

代码说明

  • try块中包含可能引发异常的代码。
  • except块捕获特定类型的异常,如果发生异常则执行该块。
  • else块在没有异常时执行。
  • finally块无论如何都会执行,多用于清理资源。

3. 常见异常类型

异常类型描述
ValueError当参数类型正确但值不合适时引发该异常。
TypeError当操作或函数应用于不适当类型的对象时引发该异常。
IndexError当尝试访问列表、元组或字符串中不存在的索引时引发。
KeyError当访问字典中不存在的键时引发。
FileNotFoundError当尝试打开一个不存在的文件时引发。
ZeroDivisionError当尝试除以零时引发。
IOError输入输出操作失败时引发。

示例代码:不同异常处理

data = [1, 2, 3]try:print(data[5])  # IndexError
except IndexError as e:print(f"索引错误:{e}")try:print(10 / 0)  # ZeroDivisionError
except ZeroDivisionError as e:print(f"除零错误:{e}")try:number = int("abc")  # ValueError
except ValueError as e:print(f"值错误:{e}")

4. 自定义异常

自定义异常可以帮助我们在特定条件下抛出我们自定义的错误类型。定义自定义异常只需继承Exception类。

示例代码:自定义异常

class MyCustomError(Exception):passdef check_value(x):if x < 0:raise MyCustomError("输入值不能为负数!")try:check_value(-10)
except MyCustomError as e:print(f"发生了自定义异常: {e}")

5. 实践项目:异常处理的小型应用

在这个小项目中,我们实现一个用户输入数字并进行计算的程序,能够处理各种异常情况。

项目需求

  1. 用户输入两个数字。
  2. 实现除法、乘法、加法和减法运算。
  3. 处理用户输入不合法的情况。

示例代码

def perform_calculation():try:num1 = float(input("请输入第一个数字: "))num2 = float(input("请输入第二个数字: "))operation = input("请选择操作 (+, -, *, /): ")if operation == "+":print(f"结果: {num1 + num2}")elif operation == "-":print(f"结果: {num1 - num2}")elif operation == "*":print(f"结果: {num1 * num2}")elif operation == "/":if num2 == 0:raise ZeroDivisionError("不能除以零!")print(f"结果: {num1 / num2}")else:print("无效的操作!")except ValueError:print("无效输入,请输入数字。")except ZeroDivisionError as e:print(e)except Exception as e:print(f"发生错误: {e}")finally:print("计算结束。")if __name__ == "__main__":perform_calculation()

代码说明

  • 用户输入后,程序尝试进行计算。
  • 通过try块捕获不同的异常类型。
  • finally块用于结束提示。
  • 程序能够处理输入错误、除零错误及其他错误。

6. 代码运行流程图

以下是异常处理程序的基本流程图说明:

+-------------------+
|     用户输入      |
+-------------------+|V
+-------------------+
|    进行计算      |
+-------------------+|+-----+|     |V     V
+-----------+ +------------+
|  除以零   | | 输入无效  | 
|  错误处理 | | 错误处理  |
+-----------+ +------------+|     ||     |V     V
+-------------------+
|     输出结果      |
+-------------------+|V
+-------------------+
|     程序结束      |
+-------------------+

7. 总结

今天我们深入学习了Python中的错误与异常处理。通过对各种异常的理解、处理以及自定义异常的实现,您可以更好地编写健壮且具有容错能力的程序。在实际开发中,良好的异常处理能够提高代码的可维护性和用户体验。

8. 练习题

  1. 编写一个程序,要求用户输入一个整数并计算其平方根,若输入不合法,返回提示信息。
  2. 修改上一个程序,添加功能,允许用户反复输入,直到输入有效的整数为止。
  3. 实现一个简单的购物车程序,用户添加商品、删除商品,并在遇到无效商品时进行适当的异常处理。

参考资料

  • Python 官方文档 - 异常
  • 自定义异常与错误处理

怎么样今天的内容还满意吗?再次感谢观众老爷的观看。
最后,祝您早日实现财务自由,还请给个赞,谢谢!

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL深入原理

MySQL深入原理 索引、事务、日志原理、InnoDB引擎、缓存、锁 有4个数据库是属于MySQL自带的系统数据库&#xff1a; ​ mysql MySQL 系统自带的核心数据库&#xff0c;它存储了MySQL的用户账户和权限信息&#xff0c;一些存储过程、事件的定义信息&#xff0c;一些运行过程中…

波分技术基础 -- Liquid OTN

什么是Liquid OTN 传统OTN技术主要定位于骨干网和城域网应用&#xff0c;主要用于承载大于1Gbits/s速率业务&#xff0c;在OTN下沉到城域/接入网后&#xff0c;面临如下问题&#xff1a;管道弹性不足&#xff08;最小管道ODU0&#xff09;、连接数少、带宽调整不够灵活等挑战。…

yolov5/8/9模型在COCO分割数据集上的应用【代码+数据集+python环境+GUI系统】

yolov5/8/9模型在COCO分割数据集上的应用【代码数据集python环境GUI系统】 yolov5/8/9模型在COCO分割数据集上的应用【代码数据集python环境GUI系统】 1.COCO数据集介绍 COCO数据集&#xff0c;全称为Microsoft Common Objects in Context&#xff0c;是微软于2014年出资标注的…

更换硬盘后,电脑装完系统进不去?或PE能识别硬盘但开机/启动/BIOS识别不了硬盘解决办法

由于现在的电脑主板&#xff0c;默认都是UEFI启动&#xff0c;硬盘只有使用GUID分区表&#xff0c;主板BIOS才找得到系统引导&#xff01; 而当我们拿到一块新硬盘&#xff0c;使用分区工具默认类型分区&#xff0c;默认是MBR类型&#xff0c;所以这种分区的硬盘&#xff0c;B…

解决Windows10关闭UAC后,开机启动项不生效的问题

Windows10关闭UAC后&#xff0c;会发现启动项不生效。 运行输入gpedit.msc打开组策略&#xff08;家庭版没有组策略功能&#xff09; 依次展开计算机配置-》Windows设置-》安全设置-》本地策略-》安全选项-》用户账户控制&#xff1a;以管理员批准模式运行所有管理员&#xf…

VGG16模型实现新冠肺炎图片多分类

1. 项目简介 本项目的目标是通过深度学习模型VGG16&#xff0c;实现对新冠肺炎图像的多分类任务&#xff0c;以帮助医疗人员对患者的影像进行快速、准确的诊断。新冠肺炎自爆发以来&#xff0c;利用医学影像如X光和CT扫描进行疾病诊断已成为重要手段之一。随着数据量的增加&am…

ETCD学习使用

一、介绍 etcd&#xff08;分布式键值存储&#xff09;是一个开源的分布式系统工具&#xff0c;用于可靠地存储和提供键值对数据。etcd 通常通过 HTTP 或 gRPC 提供 API&#xff0c;允许应用程序通过简单的接口与其交互。由于其可靠性和稳定性&#xff0c;etcd 在构建可扩展、分…

【Linux笔记】如何将内容从一个文件复制到另一个文件

比如&#xff1a;将文件tmp_file.txt中的部分数据&#xff0c;复制到file01.txt中去 tmp_file.txt文中内容&#xff1a; file01.txt为空文档 一、使用vi编辑器 I、文件中直接使用:e 目标文件进行切换文件复制 1、打开被复制文件 vi tmp_file.txt 2、进入一般命令模式 默认情况为…

电机学习-有感BLDC开环控制(六步换相)

文章目录 1. 简介2. 六步换向控制3. 机械角度和电角度4.转子位置获取5.霍尔传感器读取测试6.速度开环控制6.1 PWM设置6.2死区时间 1. 简介 BLDC的反电动势一般是梯形的反电动势&#xff0c;所以采用方波控制。如图2-1所示&#xff0c;是一个简化的内转子无刷直流电机。我们通过…

Remix在SPA模式下,出现ErrorBoundary错误页加载Ant Design组件报错,不能加载样式的问题

Remix是一个既能做服务端渲染&#xff0c;又能做单页应用的框架&#xff0c;如果想做单页应用&#xff0c;又想学服务端渲染&#xff0c;使用Remix可以降低学习成本。最近&#xff0c;在学习Remix的过程中&#xff0c;遇到了在SPA模式下与Ant Design整合的问题。 我用Remix官网…

自动化立体仓库与堆垛机单元的技术参数

导语 大家好&#xff0c;我是社长&#xff0c;老K。专注分享智能制造和智能仓储物流等内容。 新书《智能物流系统构成与技术实践》人俱乐部 完整版文件和更多学习资料&#xff0c;请球友到知识星球【智能仓储物流技术研习社】自行下载。 这份文件是一份自动化立体仓库与堆垛机单…

ViT模型

Vision Transformer (ViT) 论文地址&#xff1a;https://arxiv.org/abs/2010.11929 输入到MLP类别分类器中的特征只有类别token 经过N层transformer编码器处理后的特征的维度与输入前相同&#xff0c;均为[197&#xff0c;768]&#xff0c;我们只使用列表切片的方式提取出类…

成都睿明智科技有限公司抖音电商新蓝海领航者

在当今这个短视频与直播电商风起云涌的时代&#xff0c;抖音凭借其庞大的用户基数和高度活跃的社区氛围&#xff0c;已成为众多品牌与商家争相入驻的新蓝海。而在这场电商盛宴中&#xff0c;成都睿明智科技有限公司凭借其专业的服务、创新的策略和深厚的行业洞察力&#xff0c;…

MySQL(日志)

日志 日志分为三种&#xff1a; undo log &#xff08;回滚日志&#xff09;&#xff1a;用于事务回滚和MVCC redo log &#xff08;重做日志&#xff09;&#xff1a;用于故障恢复 binlog &#xff08;归档日志&#xff09;&#xff1a;用于数据备份和主从复制 undo log undo…

【MySQL】字符集与Collation

今天做项目&#xff0c;突然发现&#xff0c;项目中使用的MySQL的库排序规则是 utf8mb4_general_ci&#xff0c;而我自己用的MySQL8默认库规则是utf8mb4_0900_ai_ci&#xff0c;于是想要弄清楚 出处&#xff08;写的非常详细&#xff09;&#xff1a;mysql设置了utf8mb4&#x…

华为HarmonyOS地图服务 12 - 如何在地图指定位置增加气泡?

场景介绍 本章节将向您介绍如何在地图的指定位置添加气泡。 您可以通过气泡在道路上指定位置显示测速、拥堵情况。气泡支持功能: 支持设置四个方向的图标(传入的图标宽高需要相同)。支持设置图标碰撞规则。支持设置当前气泡的候选坐标段,通过计算使气泡在最佳的线段位置上…

C++速通LeetCode中等第16题-环形链表II(快慢指针)

算法思路&#xff08;主要是数学推导&#xff09;&#xff1a; /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/ class Solution { public:ListNode *detectCycle(ListNo…

KVM环境下制作ubuntu qcow2格式镜像

如果是Ubuntu KVM环境是VMware虚拟机&#xff0c;需要CPU开启虚拟化 1、配置镜像源 wget -O /etc/apt/sources.list https://www.qingtongqing.cc/ubuntu/sources.list2、安装kvm qemu-img libvirt kvm虚拟化所需环境组件 apt -y install qemu-kvm virt-manager libvirt-da…

【JavaEE】——多线程(join阻塞,计算,引用,状态)

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯&#xff0c;你们的点赞收藏是我前进最大的动力&#xff01;&#xff01;希望本文内容能够帮助到你&#xff01; 目录 一&#xff1a;join等待线程结束 1&#xff1a;知识回顾 2&#xff1a;join的功能就是“阻塞等待” …

tcp、udp通信调试工具Socket Tool

tcp、udp通信调试工具Socket Tool ]