最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 太干了!一张图整理了 Python 所有内置异常

    正文概述 掘金(阿亮亮亮_)   2020-11-27   273

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

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

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

    太干了!一张图整理了 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 所有内置异常

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元