异常概念


在程序运行过程中,经常会遇到各种各样的错误,这些错误统称为“异常”。如下表是Python常见的异常与描述:

异常描述
NameError尝试访问一个未声明的变量引发错误
IndexError索引超出序列范围引发错误
IndentationError缩进错误
ValueError传入的值错误
KeyError请求一个不存在的字典关键字引发的错误
IOError输入输出错误(如要读取的文件不存在)
ImportError当import语句无法找到模块引发的错误
AttributeError当尝试访问位置的对象属性时,引发的错误
TypeError类型不合适引发的错误
MemoryError内存不足
ZeroDivisionError当除数为0时引发的错误

异常处理语句


try...except 语句

使用try...except语捕获并处理异常时,把可能产生异常的代码放在try语句块中,把处理结果放在except语句块中:若try执行时出现错误,将会执行except语句块,否则将不执行except语句块,语法结构如下:

try:block1
except [ExceptionName [as alias]]:block2
  • block1:表示可能报错的代码块
  • ExceptionName [as alias]:可选参数,用于指定要捕获的异常。[as alias]表示为当前的异常指定一个别名,通过该别名,可以记录异常的具体内容
  • block2:表示进行异常处理的代码块

在捕捉异常时,如果需要同时处理多个异常,可以在except语句后面使用()将可能出现的异常括起来,间隔使用逗号分割。

try...except...else 语句

还有一种方式是在try...except的基础上加上else子句,用于指定当try语句没有发现异常时要执行的语句。当在try语句执行过程中未发现异常,则执行else子句,否则将不执行。

try...except...finally 语句

完整的异常处理语句应该包含finally代码块,通过情况下,无论程序执行是否出现异常,而finally语句都将会执行。其语法格式如下:

try:block1
except [ExceptionName [as alias]]:block2
finally:block3
使用 raise 语句抛出异常

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

raise [ExceptionName[(reason)]]
  • ExceptionName [(reason)]:可选参数,用于指定抛出的异常名称,以及异常信息的相关描述。若省略,就会把当前的错误原样抛出。
  • reason:参数reason可以省略,若省略,则在抛出异常时,不附带任何描述信息。

程序调试


使用 IDLE 进行程序调试

1.首先打开IDLE Shell窗口,在主菜单选择 Debug -> Debugger 菜单项,将打开Debug Control 对话框,同时IDLE Shell 窗口将显示[DEBUG ON]表示已处于调试状态。如下图:

在这里插入图片描述

2.然后在IDLE Shell窗口中选择 File -> Open 菜单项,打开需要调试的文件,然后在想要添加断点的行上右击选择 Set Breakpoint菜单项可以添加断点,在想要取消断点的行上右击选择 Set Breakpoint菜单项可以取消断点。添加断点的行将以黄色底纹标记,如下图:

在这里插入图片描述

3.在添加所需的断点(添加断点的原则是:程序执行到这个位置时,想要查看某些变量的值,就在这个位置添加一个断点)后,按F5键,执行程序,这是Debug Control对话框中显示程序的执行信息,选择Globals复选框,将显示全局变量,默认只显示局部变量。如下图:

在这里插入图片描述

4.图中可以看到调试工具栏处的提供的5个按钮。此处单击Go按钮继续执行程序,直到执行到所设置的第一个断点处,程序才被暂停执行,在此期间,Debug Control窗口的数据将发生变化,如下图:

在这里插入图片描述

5.继续点击Go按钮,将执行到下一个断点,查看变量的变化,直到全部断点全部执行完毕。调试工具栏的按钮状态将变为不可用,如图:

在这里插入图片描述

6.程序调试完成后,可以关闭Debug Control对话框,此时Python Shell中将显示[DEBUG OFF]表示已经结束调试。

调试工具栏的5个按钮介绍:

按钮名称功能
Go执行跳至断点操作
Step进入要执行的函数
Over用于单步执行
Out跳出所在的函数
Quit结束调试

在调试过程中,如果所设置的断点处有其他函数调用,还可以单击Step 按钮进入函数内部.当确定该函数没有问题时,可以单击 Out按钮跳出该函数;或者在调试的过程中,当需要对已经发现的问题的原因进行修改时,可以直接单击 Quit 按钮结束调试。另外,如果调试的目的不是很明确(即不确认问题的位置),也可以直接单击 Step 按钮进行单步执行,这样可以清晰地观察程序的执行过程和数据的变量,方便找出问题。

使用 assert 语句调试程序

还可以在代码中通过print()函数把可能出现的变量输出,便于查看,但是会产生很多冗余信息,所以比较麻烦。因此,Python还提供了一种方法,即使用assert语句进行调试。它一般被用于对程序某个时刻必须满足的条件进行验证。其语法格式如下:

assert expression[,reason]
  • expression:条件表达式。如果表达式为真,则什么都不做,否则,将抛出AssertionError异常。
  • reason:可选参数,用于对判断条件进行描述,为了以后更好的直到哪儿出现了问题。

文章地址: 暑假Python基础整理 – 异常处理及程序调试

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

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

相关文章

k8s-高级调度(二)

目录 Taint(污点)与Toleration(容忍) Taint(污点):节点的排斥标记 Toleration(容忍):Pod的适配声明 与节点亲和性的对比 警戒(cordon)和转移(drain) Cordon:节点隔离(阻止新 Po…

基于OpenCV的深度学习人脸识别系统开发全攻略(DNN+FaceNet核心技术选型)

核心技术选型表 技术组件版本/型号用途OpenCV DNN4.5.5人脸检测FaceNet (facenet-pytorch)0.5.0人脸特征提取MiniConda最新版Python环境管理PyTorch1.8.0FaceNet运行基础OpenVINO2021.4模型加速(可选)SSD Caffe模型res10_300x300高精度人脸检测 一、环境准备与项目搭建 1.1 M…

【AI News | 20250714】每日AI进展

AI Repos 1、All-Model-Chat All Model Chat 是一款为Google Gemini API家族设计的网页聊天应用,支持多模态输入(图片、音频、PDF等)和多种模型(如Gemini Flash、Imagen)。它提供了丰富的自定义功能,包括高…

C 语言(二)

主要包括变量与常量、数据类型、存储方式、数制转换以及字符处理等内容一、变量与常量在 C 语言中,变量是用来存储数据的命名空间,它会在内存中分配地址。例如:int i; i 12345; 其中 i 是变量,12345 是常量。常量表示在程序运行过…

原型继承(prototypal inheritance)的工作原理

这是一个非常常见的 JavaScript 问题。所有 JS 对象都有一个__proto__属性,指向它的原型对象。当试图访问一个对象的属性时,如果没有在该对象上找到,它还会搜寻该对象的原型,以及该对象的原型的原型,依次层层向上搜索&…

OpenCV 视频处理与摄像头操作详解

1. 引言大家都来写OpenCV😊,学的好开心!2. 视频基础与OpenCV简介2.1 视频的定义视频(Video)是由一系列静态图像(帧)以一定速率连续播放形成的动态影像。其本质是利用人眼的视觉暂留效应&#xf…

Agentic AI 的威胁与缓解措施

原文:https://www.aigl.blog/content/files/2025/04/Agentic-AI—Threats-and-Mitigations.pdf AI Agent 的定义 1. 定义与基础 智能代理(Agent)的定义: 智能代理是一种能够感知环境、进行推理、做出决策并自主采取行动以实现特定…

ArrayList列表解析

ArrayList集合 ArrayList 的底层是数组队列,相当于动态数组。与 Java 中的数组相比,它的容量能动态增长。在添加大量元素前,应用程序可以使用ensureCapacity操作来增加 ArrayList 实例的容量。这可以减少递增式再分配的数量。 ArrayList 继承…

《恋与深空》中龙和蛇分别是谁的代表

在《恋与深空》宏大而神秘的世界观中,每一个符号都蕴含着深意。当玩家们热议“龙”和“蛇”这两种强大而古老的生物究竟代表着谁时,所有的线索都默契地指向了同一个名字——秦彻。 他不仅是力量与权威的象征“恶龙”,也是背负着宿命与纠葛的“…

gitignore添加后如何生效?

清除 Git 缓存: git rm -r --cached .添加文件到 Git:git add .使用 git commit 命令提交这些更改git commit -m "Update .gitignore"

多尺度频率辅助类 Mamba 线性注意力模块(MFM),融合频域和空域特征,提升多尺度、复杂场景下的目标检测能力

在伪装物体检测领域,现有方法大多依赖空间局部特征,难以有效捕捉全局信息,而 Transformer 类方法虽能建模长距离依赖关系,却存在计算成本高、网络结构复杂的问题。同时,频域特征虽具备全局建模能力,可频繁的…

Dify的默认端口怎么修改

1.定位配置文件 在 Dify 的安装目录中找到 .env 文件(通常位于 docker/ 子目录下)。此文件定义了 Docker 容器的环境变量,包括端口配置。 2.调整端口参数 修改以下两个关键配置项: # Docker 容器内部 Nginx 监听的端口&#xf…

Go内存分配

图解Go语言内存分配 - 知乎 go内置运行时,采用了自主管理,实现更好的内存使用模式,不需要每次内存分配都进行系统调用 采用TCMalloc算法:把内存分为多级管理,从而降低锁的粒度 将可用的堆内存采用二级分配的方式进行…

cursor使用mcp连接mysql数据库,url方式

背景。 用cursor生成后端代码。让cursor可以创建响应的表结构以及插入数据。使用的cursor版本是1.2.1 cursor 官网 mcp 说明smithery 中mysql mcp这个mcp具有建表的本领。 在cursor中是这样配置的。 以上这种配置方式是是通过在smithery 网站中配置好自己的mysql数据库连接后才…

Twisted study notes[1]

文章目录serverreferencesserver Twisted usually using subclass twisted.internet.protocol.Protocol to treat protocols .Protocol is a fundamental class in Twisted for implementing network protocols.protocol class instant don’t exists forever because of it w…

Python 数据建模与分析项目实战预备 Day 6 - 多模型对比与交叉验证验证策略

✅ 今日目标 引入多种常见分类模型(随机森林、支持向量机、K近邻等)比较不同模型的训练效果使用交叉验证提升评估稳定性🧾 一、对比模型列表模型类名(sklearn)适用说明逻辑回归LogisticRegression基础线、易于解释KNNK…

xss-labs 1-8关

level1打开检查&#xff0c;发现test直接放入h2标签中此时通过script绕过h2标签构造payload127.0.0.1/xss-labs/lvel1.php?name<script>alert(111)</script>直接使用script标签绕过h2,并执行alert,通过level2打开检查&#xff0c;输入的123被放在input标签里面的v…

Conda 核心命令快速查阅表

本表旨在提供一个简洁、高效的 Conda 命令参考&#xff0c;专注于最常用功能的快速查找。 1. 环境管理 (Environment Management)功能 (Function)命令 (Command)示例 (Example)创建新环境conda create -n <env_name> [packages...]conda create -n myenv python3.9 panda…

音视频学习(三十九):IDR帧和I帧

主要区分&#xff1a;I 帧 是帧内编码帧&#xff0c;IDR 帧 是一种特殊的 I 帧&#xff0c;它是“清除参考帧链的强制切断点”。H.264 视频结构 结构 H.264 视频由多个 NAL&#xff08;Network Abstraction Layer&#xff09;单元 构成&#xff0c;每一帧图像可由一个或多个 NA…

人工智能与机器学习暑期科研项目招募(可发表论文)

人工智能与机器学习暑期科研项目招募 华中科技大学博士论文指导我是计算机专业的研二学生&#xff1a;从大二开始接触科研&#xff0c;至今已发表1篇CCF-A类会议论文、1篇CCF-B类会议论文&#xff0c;以及2篇Top期刊论文。正是这段从本科开始的科研经历&#xff0c;让我在保研和…