添加异常处理代码是为了让程序在遇到异常时能继续执行,
而不是一有异常错误就直接挂了
在无法确定代码是否能够顺利成功执行
或者知道代码可能存在一些错误的时候,需要把异常预先处理好。
try语句块中0作为除数,发生异常
1 | try: |
程序发生异常,错误信息: division by zero
异常处理常用方法
匹配多种异常的两种方法
异常分开写
这里匹配的是:ZeroDivisionError 异常
1 | try: |
程序发生 ZeroDivisionError 异常,错误信息:division by zero
异常代码合起来写,让代码更简洁些
1 | try: |
程序发生 某种 异常, 错误信息:division by zero
异常的超类是:Exception ,捕获一切异常
以下两种写法效果都能捕获异常
区别是第二种简写不能捕获具体为哪种异常,只能笼统的输出异常
1 | try: |
程序发生 某种 异常, 错误信息:division by zero
程序发生 某种 异常, 错误信息:
finally语句
总会被执行,不管有没有异常发生
1 | try: |
程序发生 某种 异常, 错误信息:{}
一定会被执行的 finally 语句块
else 语句的理解
1 | try: |
‘test.txt’ 文件不存在的情况
文件不存在,[Errno 2] No such file or directory: ‘test.txt’
最后一定会干的事情
‘test.txt’ 文件存在的情况
文件已打开,可以进一步操作了!
最后一定会干的事情
自定义异常类
由于异常的超类是:Exception
所有自定义的异常类要继承:Exception 基类
直接实例化Exception类抛出异常
1 | err = Exception('自己抛出一个异常') |
32
自己抛出一个异常
Exception: 自己抛出一个异常
继承基类Exception,创建自定义异常类
1 | class MyException(Exception): |
raise MyException(‘用自定义的异常类抛出一个异常’)
main.MyException: 用自定义的异常类抛出一个异常
重写基类init, str
1 | class MyError(Exception): |
自定义异常