学Python的漫画漫步进阶 -- 第十步

news2024/11/15 9:48:13

学Python的漫画漫步进阶 -- 第十步

  • 十、异常处理
    • 10.1 第一个异常——除零异常
    • 10.2 捕获异常
      • 10.2.1 try-except语句
      • 10.2.2 多个except代码块
      • 10.2.3 多重异常捕获
      • 10.2.4 try-except语句嵌套
    • 10.3 使用finally代码块释放资源
    • 10.4 自定义异常类
    • 10.5 动动手——手动引发异常
    • 10.6 练一练
    • 10.7 异常处理的总结

十、异常处理

为增强程序的健壮性,我们也需要考虑异常处理方面的内容。例如,在读取文件时需要考虑文件不存在、文件格式不正确等异常情况。这就是本章要介绍的异常处理。

在Python中,异常处理是一种重要的编程技术,用于处理程序运行时发生的错误。Python提供了几个内置的异常类型,如ZeroDivisionErrorTypeErrorValueError等,同时也允许用户自定义异常类型。

异常处理主要通过tryexceptfinallyraise关键字实现。下面是异常处理的基本框架:

try:
    # 尝试执行的代码块
    ...
except ExceptionType:
    # 当在try部分的代码块中发生ExceptionType类型的异常时执行
    ...
finally:
    # 无论是否发生异常,都会执行的代码块
    ...

其中,ExceptionType可以是Python内置的异常类型,也可以是用户自定义的异常类型。在try代码块中,如果发生异常,程序会立即跳转到对应的except代码块中执行。如果没有异常发生,则执行完try代码块后跳过except代码块。无论是否发生异常,finally代码块中的代码总是会被执行。

除了使用tryexceptfinally关键字外,还可以使用raise关键字显式地抛出异常。例如:

raise ExceptionType("error message")

这会抛出一个类型为ExceptionType的异常,并附带一条错误消息。

在这里插入图片描述

10.1 第一个异常——除零异常

在数学中,任何整数都不能除以0,如果在计算机程序中将整数除以0,则会引发异常。
示例代码如下:

在这里插入图片描述

在这里插入图片描述

通过Python指令运行文件,输出结果:

在这里插入图片描述

在这里插入图片描述

10.2 捕获异常

我们不能防止用户输入0,但在出现异常后我们能捕获并处理异常,不至于让程序发生终止并退出。亡羊补牢,为时未晚。

在这里插入图片描述

10.2.1 try-except语句

异常捕获是通过try-except语句实现的,基本的try-except语句的语法如下。
在try代码块中包含在执行过程中可能引发异常的语句,如果没有发生异常,则跳到except代码块执行,这就是异常捕获。
try-except语句的执行流程如下。

在这里插入图片描述

在这里插入图片描述

示例代码如下:

在这里插入图片描述

通过Python指令运行文件,输出结果:

在这里插入图片描述
从运行的结果可以看出,在输入数字0后,异常发生,跳到except代码块执行。

在这里插入图片描述

将示例代码修改如下:

在这里插入图片描述

通过Python指令运行文件,输出结果:

在这里插入图片描述

10.2.2 多个except代码块

多条语句可能会引发多种不同的异常,对每一种异常都会采用不同的处理方式。针对这种情况,我们可以在一个try后面跟多个except代码块,语法如下:
在这里插入图片描述

示例代码如下:

在这里插入图片描述

通过Python指令运行文件,输出结果:

在这里插入图片描述

10.2.3 多重异常捕获

在这里插入图片描述

示例代码如下:

在这里插入图片描述

通过Python指令运行文件,输出结果:

在这里插入图片描述

10.2.4 try-except语句嵌套

try-except语句还可以嵌套,修改10.2.2节的示例代码如下:

在这里插入图片描述

通过Python指令运行文件,输出结果:

在这里插入图片描述

10.3 使用finally代码块释放资源

在这里插入图片描述
有时在try-except语句中会占用一些资源,例如打开的文件、网络连接、打开的数据库及数据结果集等都会占用计算机资源,需要程序员释放这些资源。为了确保这些资源能够被释放,可以使用finally代码块。
在try-except语句后面还可以跟一个finally代码块,语法如下:

在这里插入图片描述

无论是try代码块正常结束还是except代码块异常结束,都会执行finally代码块。

在这里插入图片描述
使用finally代码块的示例代码如下:

在这里插入图片描述
通过Python指令运行文件,输出结果:

在这里插入图片描述

10.4 自定义异常类

实现自定义异常类的示例代码如下:

在这里插入图片描述

10.5 动动手——手动引发异常

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

示例代码如下:
通过Python指令运行文件,输出结果:

在这里插入图片描述
在这里插入图片描述

10.6 练一练

1 请列举一些常见的异常。

2 手动引发异常的语句有哪些?()
A.throw
B.raise
C.try
D.except

3 判断对错:(请在括号内打√或×,√表示正确,×表示错误)。

1)每个try代码块都可以伴随一个或多个except代码块,用于处理try代码块中所有可能引发的异常。()

2)为了确保这些资源被释放,可以使用finally代码块。()

3)实现自定义异常类时,需要继承Exception类或其子类。()

4)为了提供程序的健壮性,我们应该对所有类型异常都进行捕获。()

5)一个整数除以0时会引发ValueError异常。()

10.7 异常处理的总结

异常处理是编程中的一个重要概念,它允许我们为可能出现的错误或异常情况做好准备,并采取适当的措施来处理这些异常。以下是关于异常处理的一些总结性观点:

  1. 错误和异常: 在编程中,错误和异常通常是指预料之外的运行时事件。这些事件可能导致程序无法正常运行,比如尝试打开不存在的文件、除以零等。

  2. 异常处理的重要性: 异常处理可以帮助我们编写更健壮、更可靠的代码。通过捕获和处理异常,我们可以防止程序在遇到问题时崩溃,而是提供有用的错误信息或者执行其他适当的操作。这也有助于开发人员更快地找到和修复问题。

  3. Python中的异常处理: Python有一套完整的异常处理机制,包括内置的异常类型(例如ValueErrorTypeError等)和自定义异常类型。可以使用try/except块来捕获和处理异常。

  4. try/except块: try/except块是Python中处理异常的主要方式。在try块中,我们尝试执行一些代码,如果在执行过程中发生异常,控制流将立即转移到except块,而不会执行try块之后的任何代码。

  5. finally块: finally块包含那些无论是否发生异常都需要执行的代码。这可以用来清理资源,例如关闭文件或者网络连接。

  6. 引发异常: 除了处理异常,Python还允许我们主动引发异常。这可以通过raise关键字实现,我们可以用它来抛出任何我们想要的异常。

  7. 异常链: 如果一个异常在处理过程中又引发了另一个异常,那么后一个异常将被“封装”在第一个异常中,形成异常链。可以使用.cause.context属性来访问异常链。

  8. 清理资源: 在Python中,使用上下文管理器(也称为with语句)可以自动清理资源,例如文件和锁等。当with语句结束时,Python会自动调用上下文管理协议中的所有方法,确保资源被正确清理。

  9. 自定义异常类型: Python允许我们定义自己的异常类型,这可以用来表示特定程序中可能出现的特定问题。我们可以通过继承内置的Exception类来创建自定义异常类型。

  10. 异常处理最佳实践:

    • 尽可能详细地捕获异常:只捕获那些你知道如何处理的异常,将其他所有异常交给上层处理或者直接让它们传播出去。
    • 记录错误信息:在捕获并处理异常后,最好将错误信息记录下来,以便于后续的问题追踪和分析。
    • 避免过度捕获:不要在一个except块中捕获太多类型的异常,这可能会隐藏一些错误信息。
    • 用finally块关闭资源:如果你在try块中打开了资源(例如文件),确保在finally块中关闭它们,以防止资源泄漏。
    • 设计良好的错误消息:给用户提供清晰、友好的错误消息,这可以帮助他们更好地理解问题并采取适当的行动。

通过合理使用异常处理,可以大大提高代码的可靠性和可维护性。

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

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

相关文章

安卓可视大屏寻呼台 兼容标准sip协议

SV-A32i 安卓可视大屏寻呼台 兼容标准sip协议 A32i 是专门针对行业用户需求研发的一款可视大屏寻呼台产品,配备鹅颈麦克风,支持高清免提通话。基于 Android 9.0 系统,可支持第三方Android 应用安装使用,界面使用便捷。采用 10.1 英…

大模型与数据库:AI 时代的双向助推力

随着 AIGC 的时代到来,以 GPT 为首的大型语言模型(Large Language Model,LLM)已经成为当今人工智能领域最热门的话题之一。这些强大的模型不仅在内容创意生成、语言翻译和代码辅助等任务中表现出色,还对数据库的发展带…

DatenLord前沿技术分享 NO.35

达坦科技专注于打造新一代开源跨云存储平台DatenLord,通过软硬件深度融合的方式打通云云壁垒,致力于解决多云架构、多数据中心场景下异构存储、数据统一管理需求等问题,以满足不同行业客户对海量数据跨云、跨数据中心高性能访问的需求。在本周…

通过机器视觉对硬盘容器上盖的字符进行视觉识别,判断是否混料

 客户的需求  检测内容 硬盘容器上盖字符识别,以判断是否有混料。  检测要求 利用硬盘容器上盖表面字符,来判断是否有混料的情况发生,先识别全部字符。  视觉可行性分析 对贵司的样品进行了光学实验,并进行…

【操作系统】进程,线程和协程的哪些事儿

进程,线程和协程的哪些事儿 进程什么是进程?进程的状态进程的控制结构 线程为什么使用线程?什么是线程?线程与进程的比较线程的实现用户级线程内核级线程轻量级进程 协程协程是什么?协程的优势 区别进程与线程的区别协程与线程的…

【Spatial-Temporal Action Localization(三)】论文阅读2018年

文章目录 1. AVA: A Video Dataset of Spatio-temporally Localized Atomic Visual Actions 时空局部原子视觉动作的视频数据集摘要和结论模型框架思考不足之处时间信息对于识别 AVA 类别有多重要?定位与识别相比有何挑战性?哪些类别具有挑战性&#xff…

Python console cmd命令乱码(无论是os还是subprocess)

给我整无语了,花了一个多小时,根本没找到需要的答案。 网上全是改这样的 五花八门都有,我全部尝试并且还就再排列组合修改,累的。 在下文找到答案,直接os.system(chcp 65001),问题解决!引用文献…

IEC 61850扫盲

目录 1 简介 2 主要特点 2.1 信息分层 2.2 信息模型与通信协议独立 2.3 数据自描述 2.4 面向对象数据统一建模 2.5 带确认服务 2.6 不带确认的服务 2.7 VMD(虚拟制造设备) 2.8 GOOSE(Generic Object Oriented Substation Event&…

LeetCode(力扣)435. 无重叠区间Python

LeetCode435. 无重叠区间 题目链接代码 题目链接 https://leetcode.cn/problems/non-overlapping-intervals/ 代码 class Solution:def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int:if not intervals:return 0intervals.sort(keylambda x: x[0])co…

ajax day4

1、promise链式调用 /*** 目标:把回调函数嵌套代码,改成Promise链式调用结构* 需求:获取默认第一个省,第一个市,第一个地区并展示在下拉菜单中*/let pname axios({url: http://hmajax.itheima.net/api/province,}).t…

徐亦达机器学习:Kalman Filter 卡尔曼滤波笔记 (一)

P ( x t P(x_t P(xt​| x t − 1 ) x_{t-1}) xt−1​) P ( y t P(y_t P(yt​| x t ) x_t) xt​) P ( x 1 ) P(x_1) P(x1​)Discrete State DM A X t − 1 , X t A_{X_{t-1},X_t} AXt−1​,Xt​​Any π \pi πLinear Gassian Kalman DM N ( A X t − 1 B , Q ) N(AX_{t-1}B,Q)…

open-interpreter +GTX1080+wxbot+codellama

https://github.com/KillianLucas/open-interpreter/ Open Interpreter(开放解释器) 可以让大语言模型(LLMs)在本地运行代码(比如 Python、JavaScript、Shell 等)。安装后,在终端上运行 $ inte…

窄边极简折叠玻璃门,实现自由推拉及折叠,遥控随意切换透明与磨砂效果

窄边极简折叠玻璃门是一种非常实用和创新的门设计,可以提供各种功能和效果。以下是一些关于窄边极简折叠玻璃门的相关技巧和应用: 1. 自由推拉和折叠:这种门设计允许你自由地推拉和折叠门,根据需要调整门的宽度和开启面积。这使得…

数字人员工成企业得力助手,虚拟数字人为企业注入高科技基因

随着互联网和人工智能技术的快速发展,以“数字员工”为代表的数字生产力,正在出现在各行各业的业务场景中。数字人员工的出现不是替代人类,而是通过技术提高工作效率,实现更加智能化的服务体验,帮助企业实现大规模自动…

C语言--字符串旋转笔试题

C语言–字符串旋转笔试题 文章目录 C语言--字符串旋转笔试题一、字符串左旋1.1 思路11.2 思路1代码1.3 思路21.4 思路2代码 二、字符串旋转结果判断2.1 思路12.2 思路2 一、字符串左旋 实现一个函数,可以左旋字符串中的k个字符。 例如: ABCD左旋一个字…

Truenas scale 配置Zerotier

Zerotier 注册 官网注册 zerotier, Truenas 安装 Zerotier Truenas的 APP -> Available Applications 中搜索 zerotier 在 Network中填入 zerotier 注册账户后给你的ID。 勾选 Host Network 在这里插入图片描述 Zerotier 中给定权限 左侧 框框 打钩&#…

Spring Boot集成Redis实现数据缓存

🌿欢迎来到衍生星球的CSDN博文🌿 🍁本文主要学习Spring Boot集成Redis实现数据缓存 🍁 🌱我是衍生星球,一个从事集成开发的打工人🌱 ⭐️喜欢的朋友可以关注一下🫰🫰&…

MyEclipse 用tomcat部署SSM项目后,项目名称和当前项目不一致

MyEclipse 用tomcat部署SSM项目后,项目成功启动,但是访问所有接口报404 从这里可以看到,部署的项目名为accurate_sugar_control_yc_api,但实际我们项目名字应该为accurate_sugar_control_otc_api 解决办法 在本地找到项目的根目…

SAFe大规模敏捷认证SAFeScrumMaster Leading SAFe6.0官方双认证班,双证培训班

课程简介 根据最新的敏捷行业调研报告,敏捷的实施越来越广泛和深入,已经超越了选择几个试点团队进行敏捷尝试的阶段,大规模敏捷的实施已经成为企业敏捷转型的重中之重,因此作为Scrum Master仅仅了解单团队敏捷的运作是不够的&…

详解哈希,理解及应用

全文目录 概念哈希冲突及原因解决哈希冲突的方法闭散列线性探测二次探测扩容 开散列扩容 哈希的应用位图布隆过滤器 概念 通过映射关系将关键字映射到存储位置,并实现增删改查操作。 通过上面的方法构造出来的结构就叫哈希表(散列表)&#x…