太干了!一张图整理了 Python 所有内置异常
在编写程序时,可能会经常报出一些异常,很大一方面原因是自己的疏忽大意导致程序给出错误信息,另一方面是因为有些异常是程序运行时不可避免的,比如在爬虫时可能有几个网页的结构不一致,这时两种结构的网页用同一套代码就会出错,所以我们就需要捕获出现的异常,以防止程序因为错误信息而终止运行。
Python有很多的内置异常,也就是说Python开发者提前考虑到了用户编程过程中可能会出现这类错误,所以制造了这些内置异常可以快速准确向用户反馈出错信息帮助找出代码中的bug。
Python官方文档中也给出了所有内置异常及触发条件,为了更好的阅读体验,我把所有异常及触发条件整理成了一张思维导图:
获取方式:公众号Python极客专栏
后台回复关键字「异常」获取高清导图
下面针对几个常见的异常单独介绍一下,通过举例深入了解在什么条件下会触发哪一种异常。
1、SyntaxError
SyntaxError主要是Python语法发生了错误,比如少个冒号、多个引号之类的,编程时稍微疏忽大意一下就会出错,应该是最常见的一种异常错误了。
In [1]: While True print('1')
File "<ipython-input-1-8ebf67bb4c2b>", line 1
While True print('1')
^
SyntaxError: invalid syntax
2、TypeError
TypeError是类型错误,也就是说将某个操作或功能应用于不合适类型的对象时引发,比如整型与字符型进行加减法、在两个列表之间进行相减操作等等。
In [8]: a = [1,2];b = [2,3]
In [9]: a-b
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-9-5ae0619f8fe1> in <module>
----> 1 a-b
TypeError: unsupported operand type(s) for -: 'list' and 'list'
3、IndexError
IndexError是指索引出现了错误,比如最常见下标索引超出了序列边界,比如当某个序列m只有三个元素,却试图访问m[4]。
In [16]: m = [1,2,3]
In [17]: m[4]
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-17-94e0dfab3ff6> in <module>
----> 1 m[4]
IndexError: list index out of range
4、KeyError
KeyError是关键字错误,这个异常主要发生在字典中,比如当用户试图访问一个字典中不存在的键时会被引发。
In [18]: dict_ = {'1':'yi','2':'er'}
In [19]: dict_['3']
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-19-c2e43847635f> in <module>
----> 1 dict_['3']
KeyError: '3'
5、ValueError
ValueError为值错误,当用户传入一个调用者不期望的值时会引发,即使这个值的类型是正确的,比如想获取一个列表中某个不存在值的索引。
In [22]: n = [1,2,3]
In [23]: n.index(4)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-23-9a1887cf29d7> in <module>
----> 1 n.index(4)
ValueError: 4 is not in list
6、AttributeError
AttributeError是属性错误,当用户试图访问一个对象不存在的属性时会引发,比如列表有index方法,而字典却没有,所以对一个字典对象调用该方法就会引发该异常。
In [25]: dict_ = {'1':'yi','2':'er'}
In [26]: dict_.index('1')
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-26-516844ad2563> in <module>
----> 1 dict_.index('1')
AttributeError: 'dict' object has no attribute 'index'
7、NameError
NameError是指变量名称发生错误,比如用户试图调用一个还未被赋值或初始化的变量时会被触发。
In [27]: print(list_)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-27-87ebf02ffcab> in <module>
----> 1 print(list_)
NameError: name 'list_' is not defined
8、FileNotFoundError
FileNotFoundError为打开文件错误,当用户试图以读取方式打开一个不存在的文件时引发。
In [29]: fb = open('./list','r')
---------------------------------------------------------------------------
FileNotFoundError Traceback (most recent call last)
<ipython-input-29-1b65fe5400ea> in <module>
----> 1 fb = open('./list','r')
FileNotFoundError: [Errno 2] No such file or directory: './list'
9、StopIteration
StopIteration为迭代器错误,当访问至迭代器最后一个值时仍然继续访问,就会引发这种异常,提醒用户迭代器中已经没有值可供访问了。
In [30]: list1 = [1,2]
In [31]: list2 = iter(list1)
In [33]: next(list2)
Out[33]: 1
In [34]: next(list2)
Out[34]: 2
In [35]: next(list2)
---------------------------------------------------------------------------
StopIteration Traceback (most recent call last)
<ipython-input-35-5a5a8526e73b> in <module>
----> 1 next(list2)
10、AssertionError
AssertionError为断言错误,当用户利用断言语句检测异常时,如果断言语句检测的表达式为假,则会引发这种异常。
In [45]: list3 = [1,2]
In [46]: assert len(list3)>2
---------------------------------------------------------------------------
AssertionError Traceback (most recent call last)
<ipython-input-46-ffd051e2ba94> in <module>
----> 1 assert len(list3)>2
AssertionError:
上面这些异常应该是平时编程中遇见频率比较高的一部分,完整的还是要看上文的思维导图或者查阅官方文档,当然除此之外Python也支持用户根据自己的需求自定义异常,这里就不再过多概述了。
对于异常的处理Python也有着比较强大的功能,比如可以捕获异常,主动抛出异常等等,主要有下面几种方式:
- 1.try ... except 结构语句捕获
- 2.try ... except ... finally 结构语句捕获
- 3.try ... except ... else 结构语句捕获
- 4.raise关键字主动抛出异常
- 5.try ... raise ... except 触发异常
- 6.assert断言语句
- 7.traceback模块跟踪查看异常
史上最全Python资料汇总(长期更新)。隔壁小孩都馋哭了 --- 点击领取
太干了!一张图整理了 Python 所有内置异常的更多相关文章
- 干!一张图整理了 Python 所有内置异常
在编写程序时,可能会经常报出一些异常,很大一方面原因是自己的疏忽大意导致程序给出错误信息,另一方面是因为有些异常是程序运行时不可避免的,比如在爬虫时可能有几个网页的结构不一致,这时两种结构的网页用同一 ...
- str.方法的整理(字符串类型内置方法的具体使用)
<1>str.strip().str.lstrip()和str.rstrip() 1' str.strip()(主要方法) 方法:str.strip(self,chars) 作用:移除字符 ...
- python常用内置函数整理
1.最常见的内置函数是print print("Hello World!") 2.数学运算 abs(-5) # 取绝对值,也就是5 round(2.6) # 四舍五入取整,也就是3 ...
- Python常用内置函数整理(lambda,reduce,zip,filter,map)
匿名函数lambda lambda argument1,argument2,...argumentN :expression using arguments 1.lambda是一个表达式,而不是一个语 ...
- 【装逼利器效率软件】一张图问你想不想用Launchy
简述:Launchy博客园很多文章,长篇大论文字太多. 一张图问你想不想用? 长话多说: 一.设置Launchy扫描目录,安装后会默认,个人推荐自定义目录比较好 二.自行建立快捷方式别名文件夹,存放各 ...
- 2.5w字 + 36 张图爆肝操作系统面试题,太牛逼了!
欢迎各位大佬访问我的 github ,跪求 star bestJavaer 大家好,我是 cxuan,我之前汇总了一下关于操作系统的面试题,最近又重新翻阅了一下发现不是很全,现在也到了面试季了,所以我 ...
- 程序员深夜惨遭老婆鄙视,原因竟是CAS原理太简单?| 每一张图都力求精美
悟空 种树比较好的时间是十年前,其次是现在. 自主开发了Java学习平台.PMP刷题小程序.目前主修Java.多线程.SpringBoot.SpringCloud.k8s. 本公众号不限于分享技术,也 ...
- 从一张图开始,谈一谈.NET Core和前后端技术的演进之路
从一张图开始,谈一谈.NET Core和前后端技术的演进之路 邹溪源,李文强,来自长沙.NET技术社区 一张图 2019年3月10日,在长沙.NET 技术社区组织的技术沙龙<.NET Core和 ...
- 一张图看懂Rxjava的原理
前言 Rxjava是NetFlix出品的Java框架, 官方描述为 a library for composing asynchronous and event-based programs usin ...
随机推荐
- 模型评价指标:AUC
参考链接:https://www.iteye.com/blog/lps-683-2387643 问题: AUC是什么 AUC能拿来干什么 AUC如何求解(深入理解AUC) AUC是什么 混淆矩阵(Co ...
- 如何用vue实现一个矩形标记区域 rectangle marker
代码地址:vue-rectangle-marker 一.前言 一些cms系统经常会用到区域标记功能,所以写了个用vue实现的矩形标记区域,包含拖拽.放大缩小.重置功能. 二.实现结果 初始 标记 三. ...
- 使用 Filebeat 对多行日志进行处理(multiline)
Filebeat 收集日志的过程中,默认是按行收取的,也就是每一行都会默认是一个单独的事件并添加时间戳.但是在收集一些特殊日志的时候,往往一个事件包含有多行,例如 Java 的堆栈跟踪日志: 20-0 ...
- Web前端_流式布局(百分比布局)
移动Web_流式布局(百分比布局) writer:late at night codepeasant 1(百分比布局) ☞核心知识点 1.流式布局(百分比布局) 2.视口设置 ☞今日目标 1. 能够使 ...
- JWT安装配置
1.1 安装JWT pip install djangorestframework-jwt==1.11.0 1.2 syl/settings.py 配置jwt载荷中的有效期设置 import date ...
- Java-GUI基础(一)
简介 首先,Java的学习就是不断学习一个个包与类的过程,对于GUI部分有两个核心包:java.awt与javax.swing, 这两个包可以说是涵盖了java的GUI部分所有的类(和他们的方法). ...
- docker搭建redis集群
一.简介 docker作为一个容器技术,在搭建资源隔离性服务上具有很大的优势,在一台服务器上可以启动多个docker容器,感觉每个在容器里面部署的服务就像是部署在不同的服务器上.此次基于docker以 ...
- 【Kata Daily 190927】Counting sheep...(数绵羊)
题目: Consider an array of sheep where some sheep may be missing from their place. We need a function ...
- AQS源码深入分析之条件队列-你知道Java中的阻塞队列是如何实现的吗?
本文基于JDK-8u261源码分析 1 简介 因为CLH队列中的线程,什么线程获取到锁,什么线程进入队列排队,什么线程释放锁,这些都是不受我们控制的.所以条件队列的出现为我们提供了主动式地.只有满足指 ...
- H264音视频直播系统 服务器端+客户端源码 可用于直播系统搭建
RTP协议实现直播系统搭建,采用H.264和AAC编码,码率极低,同时有较高的视频清晰度和音频音质,可用于视频聊天.视频会议.摄像头监控等多种应用场景. 直播系统搭建发布端,选择视频和音频设备,指定服 ...