在编写程序时,可能会经常报出一些异常,很大一方面原因是自己的疏忽大意导致程序给出错误信息,另一方面是因为有些异常是程序运行时不可避免的,比如在爬虫时可能有几个网页的结构不一致,这时两种结构的网页用同一套代码就会出错,所以我们就需要捕获出现的异常,以防止程序因为错误信息而终止运行。

Python有很多的内置异常,也就是说Python开发者提前考虑到了用户编程过程中可能会出现这类错误,所以制造了这些内置异常可以快速准确向用户反馈出错信息帮助找出代码中的bug。

Python官方文档中也给出了所有内置异常及触发条件,为了更好的阅读体验,我把所有异常及触发条件整理成了一张思维导图:

下面针对几个常见的异常单独介绍一下,通过举例深入了解在什么条件下会触发哪一种异常。

1、SyntaxError

SyntaxError主要是Python语法发生了错误,比如少个冒号、多个引号之类的,编程时稍微疏忽大意一下就会出错,应该是最常见的一种异常错误了。

In [1]: While True print('1')
  File "", 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)-9-5ae0619f8fe1> in 
----> 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)-17-94e0dfab3ff6> in 
----> 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)-19-c2e43847635f> in 
----> 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)-23-9a1887cf29d7> in 
----> 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)-26-516844ad2563> in 
----> 1 dict_.index('1')
AttributeError: 'dict' object has no attribute 'index'

7、NameError

NameError是指变量名称发生错误,比如用户试图调用一个还未被赋值或初始化的变量时会被触发。

In [27]: print(list_)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)-27-87ebf02ffcab> in 
----> 1 print(list_)
NameError: name 'list_' is not defined

8、FileNotFoundError

FileNotFoundError为打开文件错误,当用户试图以读取方式打开一个不存在的文件时引发。

In [29]: fb = open('./list','r')
---------------------------------------------------------------------------
FileNotFoundError                         Traceback (most recent call last)-29-1b65fe5400ea> in 
----> 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)-35-5a5a8526e73b> in 
----> 1 next(list2)

10、AssertionError

AssertionError为断言错误,当用户利用断言语句检测异常时,如果断言语句检测的表达式为假,则会引发这种异常。

In [45]: list3 = [1,2]
In [46]: assert len(list3)>2
---------------------------------------------------------------------------
AssertionError                            Traceback (most recent call last)-46-ffd051e2ba94> in 
----> 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模块跟踪查看异常

高清版本的下载地址:

链接:https://pan.baidu.com/s/1X4NIoRec1umU6Dhh9GobQQ

提取码:tcwy

赛博朋克这么火,如果与Python结合,能有多酷?免费分享一个可以识别身份证号信息的数据库一篇文章教会你使用Python图片格式转换器并识别图片中的文字如何评价杭州阿里、海康、网易等组成 HR 联盟?新一代的网络请求库 Httpx

End

码农升级

长按二维码关注

你点的每个在看,我都认真当成了喜欢

python时间减法_干!一张图整理了 Python 所有内置异常相关推荐

  1. staticextension 上提供值时引发了异常_干!一张图整理了 Python 所有内置异常

    在编写程序时,可能会经常报出一些异常,很大一方面原因是自己的疏忽大意导致程序给出错误信息,另一方面是因为有些异常是程序运行时不可避免的,比如在爬虫时可能有几个网页的结构不一致,这时两种结构的网页用同一 ...

  2. 干!一张图整理了 Python 所有内置异常

    在编写程序时,可能会经常报出一些异常,很大一方面原因是自己的疏忽大意导致程序给出错误信息,另一方面是因为有些异常是程序运行时不可避免的,比如在爬虫时可能有几个网页的结构不一致,这时两种结构的网页用同一 ...

  3. staticextension 上提供值时引发了异常_牛!一张图整理出了 Python 所有内置异常

    在编写程序时,可能会经常报出一些异常,很大一方面原因是自己的疏忽大意导致程序给出错误信息,另一方面是因为有些异常是程序运行时不可避免的,比如在爬虫时可能有几个网页的结构不一致,这时两种结构的网页用同一 ...

  4. chatgpt赋能python:Python将两张图片拼接成一张图:让您的图片处理更高效!

    Python将两张图片拼接成一张图:让您的图片处理更高效! 作为一个有着10年Python编程经验的工程师,我发现Python成为了许多项目的主要语言,其中涵盖了很多关于图像处理的应用程序.在本文中, ...

  5. python时间计算_日期天数差计算(Python)

    描述 从json文件中读取两个时间数据(数据格式例如:2019.01.01,数据类型是字符串),并计算结果,打印出两个时间间隔了多少天. 输入/输出描述 输入描述 json文件名称datetime.j ...

  6. python错误代码提示手册_腾讯大佬整理了 Python 所有内置异常,Python高手必备的排错手册...

    ↑关注 + 星标 ,每天学Python新技能后台回复[大礼包]送你Python自学大礼 在编写程序时,可能会经常报出一些异常,很大一方面原因是自己的疏忽大意导致程序给出错误信息,另一方面是因为有些异常 ...

  7. 一张图片解决 Python 所有内置异常

    在编写程序时,可能会经常报出一些异常,很大一方面原因是自己的疏忽大意导致程序给出错误信息,另一方面是因为有些异常是程序运行时不可避免的,比如在爬虫时可能有几个网页的结构不一致,这时两种结构的网页用同一 ...

  8. Python基础:内置异常(未完待续)

    Python基础:内置异常(未完待续) 参考文章: (1)Python基础:内置异常(未完待续) (2)https://www.cnblogs.com/luo630/p/9176768.html 备忘 ...

  9. Python 内置异常类(Exception)

    Python中即使语句或表达式在语法上是正确的,但在尝试执行时,它仍可能会引发错误. 在执行时检测到的错误被称为*异常*(Exception),异常(Exception)不一定会导致严重后果.为方便处 ...

最新文章

  1. R语言ggplot2可视化改变线图(line plot)中线条的色彩实战
  2. 好书推荐:《Implementing Database Security and Auditing》-数据库应用安全
  3. 区块链100讲:EOS环境搭建入门(私链节点-钱包-密钥-账号)
  4. 减少Java垃圾收集开销的5条提示
  5. 轮询数据库 java_谁做过定时任务,轮询查询数据。
  6. (王道408考研操作系统)第二章进程管理-第三节7:经典同步问题之多生产者与多消费者问题
  7. 吴军信息论40讲_吴军:有时候成功比失败更糟糕!顺势而为还是走弯路,就看一件事...
  8. mysql nutch_nutch2.2+mysql部署
  9. 微信小程序 图片轮播 视频
  10. Hspice学习资源和心得
  11. Activity 审批流简单介绍
  12. 网吧服务器多长时间维护,网吧服务器常用设置维护工具
  13. 程序员们一个一个的都挺神的,堪称 35 岁毕业之后再就业的标兵,不服不行
  14. “老程序员如何能保证自己一直立于不败之地?
  15. opencv c++实现棋盘格标定
  16. flex-shrink 解决实际问题(flex-shrink:0避免图片被压扁)
  17. JavaScript 获取当前时间的前后几天、增加或减少指定天数
  18. unix服务器备份文件命令,linux/unix系统间文件备份脚本
  19. Modbus通讯协议
  20. HDU 1914 The Stable Marriage Problem (稳定婚姻匹配)

热门文章

  1. ES5-拓展 隐式数据类型转换
  2. RPC 和 RESTful
  3. 递归和分治思想及其应用
  4. Linux配置 DNS and BIND服务配置详解--缓存服务器配置 正反向解析配置
  5. bootcmd 和bootargs
  6. QtCreator5.12.6安装图文教程
  7. 学习笔记(03):Python实战编程-sys模块
  8. C#中数据流(文件流、内存流、网络流等)相关知识点梳理
  9. java将xml中的标签名称转为小写_深入学习Java Web(七): JSTL标签库
  10. 连续时间系统与离散时间系统的时域分析对比