文章目录
- 前言
- 一、异常处理机制
- 二、异常处理基本结构
-
- 1.基本结构
- 2.常见异常类
- 3.捕捉多个异常
- 4.try…finally终止行为
- 5.主动引发异常
- 6.自定义异常类
- 总结
前言 ??异常处理是Python的一种高级工具,当异常发生时,程序会停止当前的所有工作,跳转到异常处理部分去执行。异常既可以是程序错误引发的,也可以是由代码主动触发 一、异常处理机制 ??Python使用被称为异常的特殊对象来管理程序执行期间发生的错误。如果你编写了处理该异常的代码,程序将继续运行;如果你未对异常进行处理,程序将停止,并显示一个traceback,其中包含有关异常的报告。 二、异常处理基本结构 1.基本结构 代码如下:
try:
可能引发异常的代码
except 异常类型名称:
异常处理代码
else:
没有发生异常时执行的代码
??在处理异常时,将可能引发异常的代码放在try语句块中。在except语句中指明捕捉处理的异常类型名称,except语句块中为发生指定异常时执行的代码。else语句块中为没有发生异常时执行的代码,else部分可以省略。 2.常见异常类
- AttributeError:访问对象属性时引发的异常,如属性不存在或则不支持赋值等;
- EOFError:使用input()函数读文件时,遇到文件结束标志EOF时发生的异常。文件对象的read()和readline()方法遇到EOF时返回空字符串,不会引发异常;
- ImportError:导入模块出错引发的异常;
- IndexError:使用序列对象的下标超出范围时引发的异常;
- StopIteration:迭代器没有进一步可迭代元素时引发的异常;
- IndentationError:使用了不正确的缩进时引发的异常;
- TabError:使用Tab键和空格缩进时不一致引发的异常;
- TypeError:在运算或函数调用时,使用了不兼容的类型时引发的异常;
- ZeroDivisionError:除数为0时引发的异常。
x=[1,2]
try:
x[0]/0
except ZeroDivisionError:
print("除0错误")
except IndexError:
print("索引下标超出范围")
else:
print("没有错误")
?? 2、可以在except语句中同时指定多种异常,以便使用相同的异常处理代码进行统一处理。在except语句中可以使用as为异常类创建一个实例对象。 代码示例如下:
x = [1,2]
try:
x[0]/0
except ZeroDivisionError as err:
print("程序运行出错,错误信息如下:")
print("异常类型:",err.__class__.__name__)
print("异常信息:",err)
4.try…finally终止行为 ??在异常处理结构中,可以使用finally定义终止行为。不管try语句块中是否发生异常,finally语句块中的代码都会执行。 代码示例如下:
def function():
try:
print(5/0)
except:
print("出错了")
finally:
print("finally部分已执行")#不管是否发生异常都会执行
print("程序运行结束")
function()#执行函数
5.主动引发异常 ??并非只有在程序运行出错时才可引发异常,Python允许在代码中使用raise或assert语句主动引发异常。 5.1、raise语句基本格式如下:
raise 异常类名
raise 异常类实例对象
raise
raise语句基本用法如下:
# 1、类名引发异常
raise IndexError
# 2、创建异常类的实例对象后引发异常
x = IndexError()
raise x
# 3、不带参数的raise语句可再次引发刚刚发生过的异常,其作用就是向外传递异常
try:
raise IndexError#引发异常
except:
print("程序运行出错了")
raise#再次引发异常
# 4、在使用raise语句引发异常时,可以为异常类指定描述信息
raise IndexError("索引下标超出范围")
# 5、异常链:异常引发异常
#可以使用raise…from…语句,使用异常来引发另一个异常
try:
5/0
except Exception as x:
raise IndexError("下标越界")from x#引发另一个异常
5.2、assert语句基本格式如下:
??assert语句在“测试表达式”的值为假时,引发AssertionError异常,data作为异常描述信息。
assert测试表达式,data
assert语句基本用法如下:
try:
import math
x = 5
assert x>=0,'参数x必须是非负数'
except Exception as err:
print("程序运行出错,错误信息如下:")
print("异常类型:",err.__class__.__name__)
print("异常信息:",err)
6.自定义异常类 ??自定义异常类可以提供常规异常处理之外的自定义操作。
?? 所有异常类独有共同的超类:BaseException、Exception。
- BaseException类是所有异常类的顶级超类。不能直接继承BaseException类来定义自己的异常类;BaseException类的唯一子类是Exception类。BaseException类为子类提供了默认的打印和状态保持行为。在创建异常类实例对象时,可以用一个字符串作为异常描述信息。在打印异常类实例对象时,显示异常描述信息。
- Exception类是其他所有Python内置异常类的超类,除了GeneratorExit、KeyboardInterrupt和SystemExit。通常用户自定义的异常类均使用Exception类作为超类。在使用try语句处理异常时,可指定捕捉Exception异常,而不是空的except。这样可以更明确的捕捉异常,并可通过异常实例对象获得更多信息。
推荐阅读
- 看这一篇就够了!Python Openpyxl完整开发实例分析
- python|Kafka
- C语言与C++编程|马斯克(我是 Rust 粉丝,但为了性能会选择 C语言)
- 游戏|这就是传说中的天才程序员吧! | 每日趣闻
- 10个超级实用的Python自动化脚本
- 7个超好用的Python开发工具!
- Python中最常见的10种排序算法!
- python|Python学习笔记(1)---B站黑马程序员
- python|Python学习笔记(2)---B站黑马程序员