Python零基础入门(十一)——异常处理

系列文章目录

个人简介:机电专业在读研究生,CSDN内容合伙人,博主个人首页
Python入门专栏:《Python入门》欢迎阅读,一起进步!🌟🌟🌟
码字不易,如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒+关注哦!😊😊😊


文章目录

  • 系列文章目录
  • 导语
  • 异常概述
  • 异常处理语句
    • try-except语句
    • try-except-else语句
    • try-except-finally语句
    • 使用raise语句抛出异常
  • 程序调试
    • 使用print语句
    • 使用断点调试
    • 使用IDE的调试工具
  • 结语

导语

欢迎来到本系列的第十一篇文章!在前面的学习中,已经介绍了 Python 的基本语法、条件和循环语句、函数、面向对象编程以及模块与包的使用。今天,我们将继续拓展我们的 Python 技能,学习异常处理。在编程过程中,难免会出现错误和异常情况。异常处理是一种能够优雅地处理这些错误情况的方式,使程序更加健壮和可靠,让我们一起开始吧!

异常概述

在 Python 中,异常(Exception)是指程序执行过程中发生的错误或意外情况。当遇到异常时,程序会立即终止并抛出异常信息。常见的异常有如下(了解,不需记住):

错误类型描述
SyntaxError语法错误,通常是由于代码书写不符合 Python 语法规则导致的
IndentationError缩进错误,通常是由于代码缩进不正确导致的
NameError名称错误,通常是由于访问一个未定义的变量或函数导致的
TypeError类型错误,通常是由于操作对象的类型不正确导致的
ZeroDivisionError零除错误,通常是由于除数为零导致的
IndexError索引错误,通常是由于访问列表或序列中不存在的索引导致的
KeyError键错误,通常是由于在字典中访问不存在的键导致的
FileNotFoundError文件未找到错误,通常是由于打开或读取不存在的文件导致的
ImportError导入错误,通常是由于导入不存在的模块或包导致的
ValueError值错误,通常是由于函数或方法接收到无效的参数值导致的
IOErrorIO 错误,通常是由于输入输出操作失败导致的
AttributeError属性错误,通常是由于访问对象不存在的属性或方法导致的

以上列出的是一小部分常见的 Python 错误类型。在实际编程中,可能会遇到更多不同类型的错误。理解这些错误的原因和含义,将有助于快速定位和解决问题。

异常处理语句

如果不处理上面的异常,程序将会崩溃。为了避免程序异常终止,需要使用异常处理来捕获并处理这些异常情况。Python 提供了一组用于异常处理的语句,可以使用它们来捕获和处理异常,从而使程序继续执行或采取相应的措施。

try-except语句

最常用的异常处理语句是 try-except 语句。它允许我们尝试执行一段可能出现异常的代码,并在出现异常时执行相应的处理代码。语法如下:

try:block1
except [ExceptionName [as alias]]:block2

其中,ExceptionName [as alias]:可选参数,用于指定要捕获的异常。ExceptionName 表示要捕获的异常名称,如果在其右侧加上 “as alias", 则表示为当前的异常指定一个别名, 通过该别名,可以记录异常的具体内容。

在使用 try-except 时,把可能产生异常的代码放在 try 语句块中,把处理结果放在 except 语句块中,这样,当 try 语句块中的代码出现错误,就会执行 except 语句块中的代码,如果 try 语句块中的代码没有错误,那么 except 语句块将不会执行。示例如下

try:# 可能出现异常的代码块result = 10 / 0  # 尝试除以零,会抛出ZeroDivisionError异常
except ZeroDivisionError:# 处理异常的代码块print("除数不能为零!")

try-except-else语句

除了 try-except,还可以使用try-except-else语句。在 try 块中的代码不发生异常时,将会执行 else 块中的代码。如下所示:

try:# 可能出现异常的代码块result = 10 / 2
except ZeroDivisionError:# 处理异常的代码块print("除数不能为零!")
else:# 未发生异常时执行的代码块print("结果为:", result)

上述例子中,除法运算没有引发异常,所以程序执行了 else 块中的代码,打印出了计算结果。

try-except-finally语句

完整的异常处理语句应该包含 finally 代码块,通常情况下,无论程序中有无异常产生,finally 代码块中的代码都会被执行。示例如下:

try:# 可能出现异常的代码块result = 10 / 0  # 尝试除以零,会抛出ZeroDivisionError异常
except ZeroDivisionError:# 处理异常的代码块print("除数不能为零!")
finally:# 不管是否发生异常,都会执行的代码块print("程序执行结束。")

在上述例子中,无论除法运算是否引发异常,finally 块中的代码都会被执行。

异常处理语句中各个子句的执行关系如下:

在这里插入图片描述

使用raise语句抛出异常

如果某个函数或方法可能会产生异常,但不想在当前函数或方法中处理这个异常,则可以使用 raise 语句在函数或方法中抛出异常。raise 语句的基本语法如下:

raise [ExceptionName[(reason)]]

其中,ExceptionName[(reason)] 为可选参数,用于指定抛出的异常名称,以及异常信息的相关描述。如果省略,就会把当前的错误原样抛出。例如:

def divide(a, b):if b == 0:raise ValueError("除数不能为零!")return a / btry:result = divide(10, 0)
except ValueError as e:print(e)  # 输出:除数不能为零!

上述例子中,自定义了一个 ValueError 异常,并在 divide 函数中根据特定条件手动抛出了这个异常。在 try-except 语句中,我们捕获了这个异常,并输出了错误信息。

程序调试

在程序开发过程中,对于语法方面的错误比较好检测,因为程序会直接停止,并且给出错误提示。而对于逻辑错误就不太容易发现了。因为程序可能会一直执行下去,但结果是错误的。所以作为一名程序员, 掌握一定 的程序调试方法,可以说是一项必备技能。

使用print语句

在程序中插入 print 语句是最简单的调试方法之一。通过在关键位置打印变量值或输出提示信息,可以帮助了解程序执行时的状态和流程。

使用断点调试

Python 提供了许多调试工具,如标准模块 pdb(Python Debugger)。通过在代码中插入断点,可以暂停程序执行,并逐步查看每个步骤的变量值和执行情况。如下:

import pdbdef divide(a, b):pdb.set_trace()  # 设置断点if b == 0:raise ValueError("除数不能为零!")return a / btry:result = divide(10, 0)
except ValueError as e:print(e)

上述例子中使用了 pdb.set_trace()divide 函数中设置了断点。当程序执行到这个断点时,会暂停执行并进入 pdb 的调试环境。在调试环境中,可以使用一些基本的命令来控制程序的执行和查看变量的值:

  • l(或 list): 显示当前代码的位置和上下文,默认显示当前行周围的代码。
  • n(或 next): 执行下一行代码。
  • s(或 step): 进入函数调用。
  • c(或 continue): 继续执行程序直到下一个断点或程序结束。
  • p <variable>(或 print <variable>): 打印变量的值。
  • h(或 help): 显示调试命令的帮助信息。
  • r(或 return): 继续执行程序直到当前函数返回。
  • q(或 quit): 退出调试环境。

使用这些命令,可以逐步执行代码、查看变量的值,并在需要时修改代码以进行调试。调试完成后,需要将代码中的断点和 pdb.set_trace() 行删除或注释掉。

使用IDE的调试工具

许多Python集成开发环境(IDE)都提供了强大的调试工具。通过使用IDE的调试功能,我们可以方便地设置断点、逐步执行代码、查看变量值和监控程序流程。

结语

综上所述,异常处理是保障程序稳健性和可靠性的重要手段。在编写 Python 程序时,应该养成良好的异常处理习惯,并合理利用调试工具,从而快速定位和解决问题

至此,《Python入门》专栏已完结,感谢阅读本专栏博客,希望对你有所帮助!祝你编程愉快!

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

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

相关文章

远程访问本地mysql

文章目录 一、设置本地mysql允许外部访问找到mysql配置文件my.ini &#xff0c;linux环境是my.cnf配置mysql配置文件 二、创建外部访问的mysql用户三、配置mysql用户的权限四、配置防火墙端口五、连接查看本地ip地址 参考 连接命令 mysql -h <host> -P <port> -u &…

深度学习之双线性插值

1、单线性插值 单线性插值是一种用于估计两个已知数据点之间未知点的方法。它基于线性关系&#xff0c;通过计算目标位置的值&#xff0c;使用已知点之间的线性函数进行插值。这在图像处理中常用于放缩、旋转等操作&#xff0c;计算简单&#xff0c;产生平滑结果&#xff0c;但…

将python源代码打包成.exe可执行文件

步骤 1、安装pyinstaller2、打开终端或命令提示符窗口并进入解释器的虚拟环境3、从解释器的虚拟环境进入包含要打包Python文件的目录4、通过以下命令打包5、打包后文件存放位置 1、安装pyinstaller pip install pyinstaller2、打开终端或命令提示符窗口并进入解释器的虚拟环境…

Win11大小写切换图标关闭方法

大家使用Win11操作系统的时候经常会切换大小写键盘&#xff0c;有些游戏本在游戏过程中需要切换大小写&#xff0c;这个时候电脑的屏幕就会出现大小写切换的图标而影响游戏体验&#xff1b; 那么想要关闭Win11电脑上大小写切换图标&#xff0c;又不知道具体怎么操作&#xff0c…

vscode如何退出/切换 github 账号

退出/切换 github 账号 左下角点击头像按钮&#xff0c;选择注销&#xff0c;然后再重新登录

阿里为啥禁止三表Join关联?

阿里出过一个《Java开发手册》&#xff0c;上面有一条规约是禁止超过三张表的join。 为什么要禁止&#xff0c;其实最主要的原因就是join的效率比较低。 mysql只有一种表连接类型:嵌套循环连接(nested-loop)&#xff0c;不支持排序-合并连接(sort-merge join)与散列连接(hash …

纯JS+Vue实现一个仪表盘

在使用canvas的时候发现数值变化&#xff0c;每次都要重新渲染&#xff0c;值都从0开始&#xff0c;这和我的需求冲突。 1. 先绘制基本的圆环背景&#xff0c;利用border-color和border-radius将正方形变成基本的圆环。 <div class"circle"><div class&qu…

Docker实战-操作Docker容器实战(二)

导语   上篇分享中,我们介绍了关于如何创建容器、如何启动容器、如何停止容器。这篇我们来分享一下如何操作容器。 如何进入容器 可以通过使用-d参数启动容器后会进入后台运行,用户无法查看容器中的信息,无法对容器中的信息进行操作。 这个时候如果我们需要进入容器对容器…

利用XSS在线平台获取用户cookie

//XSS弹窗&#xff1a; <script>alert("xss")</script> XSS漏洞&#xff1a; //XSS弹窗&#xff1a; <script>alert("xss")</script> //XSS在线平台&#xff1a; <ScRipT sRc//7ix7kigpovxdbtd32fuspgffmtmufo3wwzgnzaltddewtb…

iMX6ULL应用移植 | 移植 infoNES 模拟器(重玩经典NES游戏)

没玩过NES游戏的童年&#xff0c;可能不是80后的童年。我们小时候是从玩FC开始接触游戏机的&#xff0c;那时真的是红极一时啊&#xff0c;我上初中时还省吃俭用买了一台小霸王&#xff0c;暑假里把电视机都给打爆了&#xff01;那时任天堂单是FC机的主机的发售收入就超过全美的…

程序环境和预处理(含C语言程序的编译+链接)--1

&#x1f389;个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名乐于分享在学习道路上收获的大二在校生 &#x1f43b;‍❄个人主页&#x1f389;&#xff1a;GOTXX &#x1f43c;个人WeChat&#xff1a;ILXOXVJE &#x1f43c;本文由GOTXX原创&#xff0c;首发CSDN…

在CentOS 7上挂载硬盘到系统的步骤及操作

目录 1&#xff1a;查询未挂载硬盘2&#xff1a;创建挂载目录3&#xff1a;检查磁盘是否被分区4&#xff1a;格式化硬盘5&#xff1a;挂载目录6&#xff1a;检查挂载状态7&#xff1a;设置开机自动挂载总结&#xff1a; 本文介绍了在CentOS 7上挂载硬盘到系统的详细步骤。通过确…

完全背包问题

题目链接 题意&#xff1a;在01背包的基础上多了每个物品都可以无限取的条件 思路&#xff1a;首先考虑在01背包的基础上的暴力枚举&#xff0c;我们可以在枚举前i件物品最多拿j的容量时再遍历当前物品拿的数量 贴一个暴力tle代码&#xff1a; #include<bits/stdc.h> #d…

【云原生K8s】初识Kubernetes的理论基础

K8S由google的Borg系统(博格系统&#xff0c;google内部使用的大规模容器编排工具)作为原型&#xff0c;后经GO语言延用Borg的思路重写并捐献给CNCF基金会开源。 云原生基金会&#xff08;CNCF&#xff09;于2015年12月成立&#xff0c;隶属于Linux基金会。CNCF孵化的第一个项目…

短视频矩阵源码

一、短视频矩阵源码搭建解析&#xff1a; 目录 一、短视频矩阵源码搭建解析&#xff1a; 二、短视频矩阵源码的开发路径分享&#xff1a; 三、短视频矩阵系统开发应具备哪些能力&#xff1f; 短视频技术开发能力&#xff1a; 开发人员应具备短视频相关技术能力&#xff0c…

iOS 后台运行

iOS后台行&#xff0c;一般有两种方式&#xff1a; 1.UIBackgroundTaskIdentifier后台任务标记时, 2.设置后台运行模式&#xff0c;需要有voip&#xff0c;location功能的才行。不然app上线审核肯定是过不了的。 下面是我学习后台运行的尝试过程。 一.首先创建一个项目功程…

python#django数据库一对一/一对多/多对多

一对一OneToOneField 用户和用户信息 搭建 # 一对一 class TestUser(models.Model): usernamemodels.CharField(max_length32) password models.CharField(max_length32) class TestInfo(models.Model): mick_namemodels.CharField(max_length32) usermode…

zookeeper --- 高级篇

一、zookeeper 事件监听机制 1.1、watcher概念 zookeeper提供了数据的发布/订阅功能&#xff0c;多个订阅者可同时监听某一特定主题对象&#xff0c;当该主题对象的自身状态发生变化时(例如节点内容改变、节点下的子节点列表改变等)&#xff0c;会实时、主动通知所有订阅者 …

STM32CubeMX+VSCODE+EIDE+RT-THREAD 工程创建

Eide环境搭建暂且不表&#xff0c;后续补充。主要记录下Vscode环境下 创建Rt-thread工程的过程。分别介绍STM32CubeMX添加rtt支持包的方式和手动添加rtt kernel方式。STM32CubeMX生成工程的时候有"坑"&#xff0c;防止下次忘记&#xff0c;方便渡一下有缘人&#xff…

【Linux后端服务器开发】Reactor模式实现网络计算器

目录 一、Reactor模式概述 二、日志模块&#xff1a;Log.hpp 三、TCP连接模块&#xff1a;Sock.hpp 四、非阻塞通信模块&#xff1a;Util.hpp 五、多路复用I/O模块&#xff1a;Epoller.hpp 六、协议定制模块&#xff1a;Protocol.hpp 七、服务器模块&#xff1a;Server.…