Python编程基础15:异常
Posted howard2005
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python编程基础15:异常相关的知识,希望对你有一定的参考价值。
文章目录
零、本讲学习目标
- 理解异常的概念
- 掌握处理异常的几种方式
- 掌握raise和assert语句,会抛出自定义的异常
- 掌握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:异常的主要内容,如果未能解决你的问题,请参考以下文章