Python编程基础15:异常

Posted howard2005

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python编程基础15:异常相关的知识,希望对你有一定的参考价值。

文章目录

零、本讲学习目标

  1. 理解异常的概念
  2. 掌握处理异常的几种方式
  3. 掌握raise和assert语句,会抛出自定义的异常
  4. 掌握with和as环境安装器的使用

一、异常概述

在Python中,程序在执行的过程中产生的错误称为异常,比如变量未定义、列表索引越界、打开不存在的文件等。

(一)变量未定义异常

  • NameError(名称错误)
  • 错误信息:名称“a”未定义

(二)列表索引越界异常

  • IndexError(索引错误)
  • 错误信息:列表索引超出范围

(三)文件不存在错误

  • FileNotFoundError(文件未找到错误)
  • 错误信息:没有“love.txt”那样的文件或目录

二、异常类

(一)异常类概述

  • 所有异常都是基类Exception的成员,它们都定义在exceptions模块中。Python解释器启动时会自动导入这个模块,并且将它加入到__builtin__模块中,一般不需要手动导入这个模块。
  • 如果这个异常对象没有进行处理和捕捉,程序就会用所谓的回溯(traceback,一种错误信息)终止执行,这些信息包括错误的名称(例如NameError)、原因和错误发生的行号。

  • 内置异常的层次结构
BaseException
 +-- SystemExit
 +-- KeyboardInterrupt
 +-- GeneratorExit
 +-- Exception
      +-- StopIteration
      +-- StopAsyncIteration
      +-- ArithmeticError
      |    +-- FloatingPointError
      |    +-- OverflowError
      |    +-- ZeroDivisionError
      +-- AssertionError
      +-- AttributeError
      +-- BufferError
      +-- EOFError
      +-- ImportError
      |    +-- ModuleNotFoundError
      +-- LookupError
      |    +-- IndexError
      |    +-- KeyError
      +-- MemoryError
      +-- NameError
      |    +-- UnboundLocalError
      +-- OSError
      |    +-- BlockingIOError
      |    +-- ChildProcessError
      |    +-- ConnectionError
      |    |    +-- BrokenPipeError
      |    |    +-- ConnectionAbortedError
      |    |    +-- ConnectionRefusedError
      |    |    +-- ConnectionResetError
      |    +-- FileExistsError
      |    +-- FileNotFoundError
      |    +-- InterruptedError
      |    +-- IsADirectoryError
      |    +-- NotADirectoryError
      |    +-- PermissionError
      |    +-- ProcessLookupError
      |    +-- TimeoutError
      +-- ReferenceError
      +-- RuntimeError
      |    +-- NotImplementedError
      |    +-- RecursionError
      +-- SyntaxError
      |    +-- IndentationError
      |         +-- TabError
      +-- SystemError
      +-- TypeError
      +-- ValueError
      |    +-- UnicodeError
      |         +-- UnicodeDecodeError
      |         +-- UnicodeEncodeError
      |         +-- UnicodeTranslateError
      +-- Warning
           +-- DeprecationWarning
           +-- PendingDeprecationWarning
           +-- RuntimeWarning
           +-- SyntaxWarning
           +-- UserWarning
           +-- FutureWarning
           +-- ImportWarning
           +-- UnicodeWarning
           +-- BytesWarning
           +-- ResourceWarning

(二)常用异常类

1、NameError

  • 尝试访问一个未声明的变量,会引发NameError异常

2、ZeroDivisionError

  • 当除数为零的时候,会引发ZeroDivisionError异常

3、SyntaxError

  • 当解释器发现语法错误时,会引发SyntaxError异常

4、IndexError

  • 当使用序列中不存在的索引时,会引发IndexError异常

5、KeyError

  • 当使用映射中不存在的键时,会引发KeyError异常

6、FileNotFoundError

  • 试图打开不存在的文件时,会引发FileNotFoundError异常

7、AttributeError

  • 当尝试访问未知对象属性时,会引发AttributeError异常

8、ValueError

  • 当参数值不符合函数要求时,会引发ValueError异常

9、TypeError

  • 当参与运算的数据类型不匹配时,会引发TypeError异常
  • Python在处理字符串与数值连接时,不能像Java那样自动将其它类型数据转成字符串,而必须采用str()函数将其它类型数据转成字符串

三、异常处理

(一)捕获简单异常

1、概述

  • try-except语句定义了监控异常的一段代码,并提供了处理异常的机制。

2、语句格式

try# 语句块
except# 异常处理代码

3、时序图

4、案例演示

  • 编写程序 - 捕获简单异常.py
  • 运行程序,查看结果

(二)捕获多个异常

1、概述

  • 处理多个异常,使用try-except-except…

2、语句格式

try# 语句块
except 异常名称1# 异常处理代码1
except 异常名称2# 异常处理代码

3、 时序图

4、案例演示

  • 编写程序 - 捕获多个异常.py
  • 运行程序,查看结果

(三)捕获异常的描述信息

1、概述

  • 当出现多种异常时,为了区分不同的错误信息,可以使用as获取系统反馈的信息。

2、语句格式

# 获取描述信息
except (ZeroDivisionError, ValueError) as msg:
    print("捕捉到异常:".format(msg))

3、案例演示

  • 编写程序 - 捕获异常描述的信息.py
  • 运行程序,查看结果

(四)捕获所有的异常

1、概述

  • 当程序中出现大量异常时,捕获这些异常是非常麻烦的。这时,我们可以在except子句中不指明异常的类型,这样,不管发生何种类型的异常,都会执行except里面的处理代码。

2、案例演示

  • 编写程序 - 捕获所有的异常.py
  • 运行程序,查看结果

(五)没有捕获到异常

1、概述

  • 如果try语句没有捕获到任何的错误信息,就不再执行任何except语句,而是会执行else语句。

2、语句格式

try:
   # 语句块
except:
   # 发生异常
esle:
   # 没有异常

3、时序图

4、案例演示

  • 编写程序 - 没有捕获到异常.py

  • 运行程序,查看结果

(六)终止行为

1、概述

  • 在程序中,无论是否捕捉到异常,都必须要执行某件事情,例如关闭文件、释放锁等,这时可以提供finally语句处理。通常情况下,finally用于释放资源。

2、案例演示

  • 编写程序 - 终止行为.py
  • 运行程序,查看结果
  • 大家可以看到,无论程序是否捕获到异常,都会执行finally的子句

四、抛出异常

五、自定义异常

六、 with和as环境安装器

以上是关于Python编程基础15:异常的主要内容,如果未能解决你的问题,请参考以下文章

Python大数据分析学习基础篇——异常与函数

Python大数据分析学习基础篇——异常与函数

编程基础之Python12Python中的语句

Python基础学习第十三节 异常操作总结

python基础 — 异常处理

python 基础篇 错误和异常处理