Python 中都有哪些常见的错误和异常?
本文首发自「慕课网」,想了解更多IT干货内容,程序员圈内热闻,欢迎关注!
作者| 慕课网精英讲师 朱广蔚
Python 程序的执行过程中,当发生错误时会引起一个事件,该事件被称为异常。例如:
- 如果程序中有语法错误,会产生 SyntaxError 类型的异常
- 执行除以 0 的运算,会产生 ZeroDivisionError 类型的异常
- 打开一个不存在的文件,会产生 IOError 类型的异常
编程中常见的异常类型总结如下:
| 异常名称 | 描述 |
| ZeroDivisionError | 除(或取模)零 |
| AssertionError | 断言语句失败 |
| AttributeError | 对象没有这个属性 |
| FileNotFoundError | 文件不存在 |
| ModuleNotFoundError | 模块不存在 |
| IndexError | 序列中没有此索引(index) |
| KeyError | 映射中没有这个键 |
| NameError | 未声明/初始化对象 |
| SyntaxError | Python |
| IndentationError | 缩进错误 |
1. ZeroDivisionError 的出现场景
进行除法运算时,要求被除数不能是 0,如果被除数是 0,则会产生异常,示例代码如下:
>>> 100 / 0
Traceback (most recent call last):File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
代码块1234
- 在第 4 行,因为被除数是 0,产生 ZeroDivisionError 类型的异常
2. AssertionError 的出现场景
编写代码时,常常需要在某些特定的位置做出一些假设,假设某些条件为真,Python 使用 assert 语句假设指定条件为真:
assert 布尔表达式
代码块1
如果布尔表达式为真,assert 语句不做任何事情;如果布尔表达式为假,assert 语句抛出 AssertionError 类型的异常。
编写一个程序 AssertionError.py,功能是计算列表前 n 项元素之和:
def calcSum(list, n):assert n <= len(list)sum = 0for i in range(n):sum += list[i]print('sum = %d' % sum)list = [11, 22, 33, 44]
calcSum(list, 3)
calcSum(list, 5)
代码块1234567891011
- 在第 1 行,calcSum 计算列表 list 的前 n 项之和
- 在第 2 行,使用 assert 语句验证参数 n 是否小于等于 list 的长度正常情况下,n 是小于等于 list 的长度如果 n 大于 list 的长度,则表示输入参数 n 有错误
- 在第 9 行,创建一个长度为 4 的列表在第 10 行,传递参数 n 等于 3,是一个合法的参数在第 11 行,传递参数 n 等于 5,是一个非法的参数
程序输出结果如下:
sum = 66
Traceback (most recent call last):File "AssertionError.py", line 11, in <module>calcSum(list, 5)File "AssertionError.py", line 2, in calcSumassert n <= len(list)
AssertionError
代码块1234567
- 在第 1 行,输出 sum = 66calc(sum, 3) 计算列表前 3 项结果为 66
- 在第 7 行,输出 AssertionErrorcalc(sum, 5) 计算列表前 5 项列表只有 4 项元素产生 AssertionError 类型的异常
3. AttributeError 的出现场景
Python 使用 object.property 的形式访问对象的属性,如果没有定义指定名称的属性,则会抛出 AttributeError 类型的异常。
编写程序 AttributeError.py,程序定义了类 Person,Person 包含有两个属性:name 和 age,代码如下:
class Person:def __init__(self, name, age):self.name = nameself.age = agetom = Person('tom', 10)
print(tom.name)
print(tom.age)
print(tom.address)
代码块123456789
- 在第 1 行,定义类 Person,Person 包含有两个属性:name 和 age;
- 在第 6 行,实例化创建一个对象 tom;属性 name 为 ‘tom’;属性 age 为 10;
- 在第 7 行,访问属性 name ;
- 在第 8 行,访问属性 age;
- 在第 9 行,访问属性 address,在类 Person 中没有定义该属性。
程序输出结果如下:
tom
10
Traceback (most recent call last):File "AttributeError.py", line 9, in <module>print(tom.address)
AttributeError: 'Person' object has no attribute 'address'
代码块123456
- 在第 1 行,输出属性 name 的值;
- 在第 2 行,输出属性 age 的值;
- 在第 1 行,属性 address 不存在,产生 AttributeError 类型的异常。
4. FileNotFoundError 的出现场景
python 使用函数 open(path) 打开指定路径的文件,如果文件不存在,则产生 FileNotFoundError 类型的异常,示例如下:
>> open('non-exist-file')
Traceback (most recent call last):File "<stdin>", line 1, in <module>
FileNotFoundError: [Errno 2] No such file or directory: 'non-exist-file'
代码块1234
- 在第 4 行,因为文件 non-exist-file 不存在,产生 FileNotFoundError 类型的异常。
5. ModuleNotFoundError 的出现场景
python 使用关键字 import module_name 打开导入名称的模块,如果模块不存在,则产生 ModuleNotFoundError 类型的异常,示例如下:
>>> import non_exist_module
Traceback (most recent call last):File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'non_exist_module'
代码块1234
- 在第 4 行,因为模块 non_exist_file 不存在,产生 ModuleNotFoundError 类型的异常
6. IndexError 的出现场景
在 Python 使用 list[index] 的形式访问列表 list 的指定位置的元素,要求 index:
- 大于等于 0
- 小于列表的长度
如果 index 不在合法范围,则产生 IndexError 类型的异常。
>>> list = ['www', 'imooc', 'com']
>>> list[3]
Traceback (most recent call last):File "<stdin>", line 1, in <module>
IndexError: list index out of range
代码块12345
- 在第 1 行,创建长度为 3 的列表;合法的 index 是 0、1、2;
- 在第 2 行,index 不在合法范围;在第 5 行,产生 IndexError 类型的异常。
7. NameError 的出现场景
Python 在读取变量时,要求变量必须已经定义。如果读取一个尚未定义的变量,会产生 NameError 类型的异常。
>>> variable = 123
>>> print(varible)
Traceback (most recent call last):File "<stdin>", line 1, in <module>
NameError: name 'varible' is not defined
代码块12345
- 在第 1 行,创建变量 variable;
- 在第 2 行,此处将 variable 错误的拼写成 varible;变量 varible 还没有创建;在第 5 行,产生 NameError 类型的异常。
8. SyntaxError 的出现场景
Python 程序中出现语法错误时,会产生 SyntaxError 类型的异常。编写程序 SyntaxError.py:
if 2>1print('2>1 is True')print('2>1 is False')
代码块123
- 在第 1 行,有一处语法错误,在行尾缺少冒号 :
程序输出结果如下:
File "SyntaxError.py", line 1if 2>1^
SyntaxError: invalid syntax
代码块1234
- 在第 1 行,File “SyntaxError.py”, line 1指明错误在文件 SyntaxError.py 中的第 1 行
- 在第 4 行,产生 SyntaxError 类型的异常
9. IndentationError 的出现场景
Python 程序中出现缩进的语法错误时,会产生 IndentationError 类型的异常。编写程序 IndentationError.py:
if 2>1:print('2>1 is True')print('2>1 is False')
代码块123
- 在第 2 行,缩进为 4 个空格
- 在第 3 行,缩进为 2 个空格
程序输出结果如下:
File "IndentationError.py", line 3print('2>1 is False')^
IndentationError: unindent does not match any outer indentation level
代码块1234
- 在第 4 行,输出 IndentationError;源程序第 2 行的缩进为 2 个空格;源程序第 3 行的缩进为 4 个空格;两者不匹配,产生 IndentationError 类型的异常。
11. Python 的标准异常类型总结
在上面的小节中讲解了常见的异常类型,Python 中全部的标准的异常类型如下:
| 异常名称 | 描述 |
| SystemExit | 解释器请求退出 |
| KeyboardInterrupt | 用户中断执行(通常是输入^C) |
| Exception | 常规错误的基类 |
| StopIteration | 迭代器没有更多的值 |
| GeneratorExit | 生成器(generator)发生异常来通知退出 |
| StandardError | 所有的内建标准异常的基类 |
| ArithmeticError | 所有数值计算错误的基类 |
| FloatingPointError | 浮点计算错误 |
| OverflowError | 数值运算超出最大限制 |
| ZeroDivisionError | 除(或取模)零 |
| AssertionError | 断言语句失败 |
| AttributeError | 对象没有这个属性 |
| EOFError | 没有内建输入,到达EOF |
| EnvironmentError | 操作系统错误的基类 |
| IOError | 输入/输出操作失败 |
| OSError | 操作系统错误 |
| WindowsError | 系统调用失败 |
| ImportError | 导入模块/对象失败 |
| LookupError | 无效数据查询的基类 |
| IndexError | 序列中没有此索引(index) |
| KeyError | 映射中没有这个键 |
| MemoryError | 内存溢出错误(对于Python |
| NameError | 未声明/初始化对象 |
| UnboundLocalError | 访问未初始化的本地变量 |
| ReferenceError | 弱引用(Weak |
| RuntimeError | 一般的运行时错误 |
| NotImplementedError | 尚未实现的方法 |
| SyntaxError | Python |
| IndentationError | 缩进错误 |
| TabError | Tab |
| SystemError | 一般的解释器系统错误 |
| TypeError | 对类型无效的操作 |
| ValueError | 传入无效的参数 |
| UnicodeError | Unicode |
| UnicodeDecodeError | Unicode |
| UnicodeEncodeError | Unicode |
| UnicodeTranslateError | Unicode |
| DeprecationWarning | 关于被弃用的特征的警告 |
| FutureWarning | 关于构造将来语义会有改变的警告 |
| OverflowWarning | 旧的关于自动提升为长整型(long)的警告 |
| PendingDeprecationWarning | 关于特性将会被废弃的警告 |
| RuntimeWarning | 可疑的运行时行为(runtime |
| SyntaxWarning | 可疑的语法的警告 |
| UserWarning | 用户代码生成的警告 |
欢迎关注「慕课网」,发现更多IT圈优质内容,分享干货知识,帮助你成为更好的程序员!
相关文章:
Python 中都有哪些常见的错误和异常?
本文首发自「慕课网」,想了解更多IT干货内容,程序员圈内热闻,欢迎关注! 作者| 慕课网精英讲师 朱广蔚 Python 程序的执行过程中,当发生错误时会引起一个事件,该事件被称为异常。例如: 如果程…...
51单片机-1
1,单片机内部集成了CPU,RAM,ROM,定时器,中断系统,通讯接口等一系列电脑的常用硬件功能。单片机和计算机相比,单片机是一个袖珍版计算机 2,单片机里有中央处理器(CPU&…...
【Azure 架构师学习笔记】-Azure Data Factory (4)-触发器详解-事件触发器
本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Data Factory】系列。 接上文【Azure 架构师学习笔记】-Azure Data Factory (3)-触发器详解-翻转窗口 前言 事件触发指的是存储事件,所以在新版的ADF 中,已经明确了是“存储事件”,…...
【项目设计】高并发内存池(三)[CentralCache的实现]
🎇C学习历程:入门 博客主页:一起去看日落吗持续分享博主的C学习历程博主的能力有限,出现错误希望大家不吝赐教分享给大家一句我很喜欢的话: 也许你现在做的事情,暂时看不到成果,但不要忘记&…...
2023年,35岁测试工程师只能被“优化裁员”吗?肯定不是····
国内的互联网行业发展较快,所以造成了技术研发类员工工作强度比较大,同时技术的快速更新又需要员工不断的学习新的技术。因此淘汰率也比较高,超过35岁的基层研发类员工,往往因为家庭原因、身体原因,比较难以跟得上工作…...
gitlab部署使用,jenkins部署使用
gitlab部署使用,jenkins部署使用在线安装gitlab下载gitlab安装gitlab使用gitlab设置中文修改管理员密码创建组,创建项目,创建用户jenkins下载jenkins安装jenkin使用jenkins更改管理员密码配置拉取代码配置登录gitlab拉取代码的账号密码配置项目配置gitlab仓库配置构…...
从零开始的机械臂yolov5抓取gazebo仿真(环境搭建篇下)
sunday功能包使用介绍以及开源 sunday我给自己机械臂的命名,原型是innfos的gluon机械臂。通过sw模型文件转urdf。Sunday项目主要由六个功能包sunday_description、sunday_gazebo、sunday_moveit_config、yolov5_ros、vacuum_plugin、realsense_ros_gazebo组成&…...
GCC编译器 MinGW的下载安装使用教程
哎 总所周知 gcc可以用来编译C 和C。在linux广泛应用,那么window怎么使用gcc呢。就要用到gcc的window工具----MInGW,安装好之后,直接可以在windows的dos界面编译。下面讲解安装使用过程。1.官网下载MinGW - Minimalist GNU for Windows downl…...
【项目实战】SpringMVC配置全局属性,是实现WebMvcConfigurer接口,还是直接继承WebMvcConfigurationSupport类?
一、说明 官方推荐以下两种方式来配置全局的SpringMVC的相关属性 方式一:实现WebMvcConfigurer接口(推荐)方式二:直接继承WebMvcConfigurationSupport类。介绍一下两者区别吧。 二、 WebMvcConfigurer介绍 WebMvcConfigurer是一个接口,用于配置全局的SpringMVC的相关属…...
房产营销、地产中介如何高效低成本获客?
数字化对企业而言,机遇和挑战并存。房产企业可借助数字化加强日益扩大的业务规模和业务领域管理,以提升管理效率,降低管理难度;基于数字化技术加强客户的服务体验,进而收集多业态客户和场景数据,拓展创新业…...
Kotlin-作用域函数
在对象的上下文中执行代码块。当您在提供lambda表达式的对象上调用这样的函数时,它会形成一个临时作用域。在此范围内,可以不带名称地访问对象。这样的函数称为作用域函数。 let run with apply also 作用域函数不会引入任何新的技术功能,但它…...
QNX7.1 交叉编译开源库
1.下载QNX7.1 SDK并解压 ITL:~/work/tiqnx710$ ls -l 总用量 16 drwxrwxr-x 4 xxx4096 1月 28 13:38 host -rwxrwxr-x 1 xxx 972 1月 28 13:38 qnxsdp-env.bat -rwxrwxr-x 1 xxx 1676 1月 28 13:38 qnxsdp-env.sh drwxrwxr-x 3 xxx 4096 1月 28 13:38 target xxxITL:~/work/ti…...
论文投稿指南——中文核心期刊推荐(外国语言)
【前言】 🚀 想发论文怎么办?手把手教你论文如何投稿!那么,首先要搞懂投稿目标——论文期刊 🎄 在期刊论文的分布中,存在一种普遍现象:即对于某一特定的学科或专业来说,少数期刊所含…...
Fabric系列 - 链码-内部链码的特性
(1)Fabric repo下的案例 Chaincode(1.4的目录结构) fabric/examples/chaincode/go ├── example02 #一个简单的转账合约 ├── eventsender #发送事件通知 ├── passthru #调用其他链码(或者其他channel的链码)example02 (转账) 一个简单的转账合约。该链码简单实…...
NetApp SnapCenter 备份管理 ——借助应用程序一致的数据备份管理,简化混合云操作
NetApp SnapCenter 简单、可扩展、赋权:跨 Data Fabric 的企业级数据保护和克隆管理 主要优势 • 利用与应用程序集成的工作流和预定义策略简化备份、恢复和克隆管理。 • 借助基于存储的数据管理功能提高性能和可用性,并缩短测试和开发用时。 • 提供基…...
Java内置队列和高性能队列Disruptor
一、队列简介 队列是一种特殊的线性表,遵循先入先出、后入后出(FIFO)的基本原则,一般来说,它只允许在表的前端进行删除操作,而在表的后端进行插入操作,但是java的某些队列运行在任何地方插入删…...
比特数据结构与算法(第四章_下)二叉树的遍历
本章将会详细讲解二叉树遍历的四种方式,分别为前序遍历、中序遍历、后续遍历和层序遍历。在学习遍历之前,会先带大家回顾一下二叉树的基本概念。学习二叉树的基本操作前,需要先创建一颗二叉树,然后才能学习其相关的基本操作&#…...
chatGPT是什么
2022年11月,人工智能公司OpenAI推出了一款聊天机器人:ChatGPT。它能够通过学习和理解人类语言来进行对话,还能与聊天对象进行有逻辑的互动。除了聊天,ChatGPT还能够根据聊天对象提出的要求,进行文字翻译、文案撰写、代…...
jenkins漏洞集合
目录 CVE-2015-8103 反序列化远程代码执行 CVE-2016-0788 Jenkins CI和LTS 远程代码执行漏洞 CVE-2016-0792 低权限用户命令执行 CVE-2016-9299 代码执行 CVE-2017-1000353 Jenkins-CI 远程代码执行 CVE-2018-1000110 用户枚举 CVE-2018-1000861 远程命令执行 CVE-2018…...
用canvas画一个炫酷的粒子动画倒计时
前言 😆 这是一篇踩在活动尾声的文章,主要是之前在摸鱼社群里有人发了个粒子动画的特效视频,想着研究研究写一篇文章出来看看,结果这一下子就研究了半个多月。 😂 下面就把研究成果通过文字的形式展现出来吧…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...
OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...
2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...
C#中的CLR属性、依赖属性与附加属性
CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...
2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...
