【Python零基础】19天从零开始学Python——第十九天 面向对象之异常

第十九天 面向对象之异常

学习目标:
1、了解异常
2、捕获异常
3、异常的else
4、异常的finally
5、异常的传递
6、自定义异常

一、了解异常

(程序运行中的报错提示,控制台输出的红色字体)

异常基本写法

try:
    可能发生错误的代码
except:
    若出现错误,将执行的代码

体验异常

try:
    print(num)
except:
    print('啦啦啦')  # 啦啦啦

二、捕获异常

捕获指定异常

语法:

try:
    可能发生错误的代码
except 异常类型:
    若出现错误,将执行的代码

案例:

# 1、捕获特定异常
try:
    print(num)
except NameError:
    print(f'没有被定义')
# 2、捕获特定/指定异常
try:
    print(1/0)
except ZeroDivisionError:
    print('ZeroDivisionError出错')  # ZeroDivisionError出错

注意:
1、若是尝试执行的代码的异常类型和要捕获的异常类型不一致,无法捕获异常
2、一般try下面只放一行代码

捕获多个异常

语法:

try:
    可能发生错误的代码
except (异常类型,异常类型):
    若出现错误,将执行的代码

案例:

try:
    print(num)
    print(1/0)
except (NameError,ZeroDivisionError):
    print('有错误') 

捕获异常描述信息

语法:

try:
    可能发生错误的代码
except 异常类型 as result:
    若出现错误,将执行的代码

案例:

try:
    print(num)
except NameError as result:
    print(result)  # name 'num' is not defined

捕获所有异常

语法:

try:
    可能发生错误的代码
except Exception:
    若出现错误,将执行的代码

代码:

try:
    print(num)
except Exception as result:
    print(result)  # name 'num' is not defined

三、异常的else

else表示没有异常时要执行的代码

try:
    print(1)
except:
    print('有异常')
else:
    print('没有异常')
# 1
# 没有异常

四、异常的finally

无论是否异常都会执行的代码

try:
    print(1/0)
except ZeroDivisionError:
    print('ZeroDivisionError出错')  # ZeroDivisionError出错
else:
    print('无错')
finally:
    print('执行完毕')
# ZeroDivisionError出错
# 执行完毕

五、异常的传递

课前小知识-命令提示符运行py文件

找到存放此py文件的位置,清空,点击cmd
在这里插入图片描述
输入自己python解释器的名,加上想要打开的py文件,使用Tab键补全;回车即可显示
在这里插入图片描述

异常传递

异常传递,即异常是可以嵌套书写的
先写外面的异常,再写内层的异常
传递流程:从外层的except传递到内层的except

代码

import time
try:
    f = open('test.txt')  # 默认只读r
    try:
        while True:  # 循环读取
            content = f.readline()  # 读取一行
            if len(content) == 0:
                break
            time.sleep(2)
            print(content)
    except:
        print('在cmd中被Ctrl+C意外终止')

except:
    print('无法正常打开')

在cmd中,except捕获异常
在这里插入图片描述

六、自定义异常

1、自定义异常基本认识

概念:将不符合程序要求的错误反馈给用户
抛出自定义异常的语法:raise 异常类对象
作用:将程序要求的代码,捕获异常,抛出异常类对象

2、自定义异常步骤

1、自定义异常类
2、抛出异常
3、捕获该异常

3、自定义异常-案例

要求:用户输入的密码,必须大于3个字符否则报错

# 1、自定义异常类-Exception-有魔法方法(init-初始化)(str-设置异常的描述信息)
class ShortInputError(Exception):
    def __init__(self,length,min_len):  # 定义形参
        # 用户输入的密码长度
        self.length = length
        # 系统要求的最短长度
        self.min_len = min_len
    # 设置异常的描述信息
    def __str__(self):
        return f'您输入的密码长度是{self.length},密码不少于{self.min_len}个字符'
# 2、抛出异常
def main():
    try:
        con = input('请输入密码:')
        if len(con) < 3:
            # 抛出异常类创建的对象
            raise ShortInputError(len(con),3)
# 3、捕获该异常
    except Exception as result:
        print(result)
    else:
        print('没有异常,密码输入完成')
main()

结果1(成功)-提示用户成功

请输入密码:123
没有异常,密码输入完成

结果2(不成功)-报错给用户

请输入密码:2
您输入的密码长度是1,密码不少于3个字符

七、异常总结

1、异常语法

try:
    可能发生异常的代码
except:
    如果发生异常执行的代码
else:
    没有异常执行的代码
finally:
    无论是否异常都要执行的代码

2、捕获异常类型

except 异常类型:
    代码
except 异常类型 as xx:
    代码

3、自定义异常

1、自定义异常类:
class 异常类类名(Exception):
    # 初始化
    def __init__(self,,):
    self.属性 = 属性
    ...
    # 设置异常类的描述信息
    def __str__(self):
        return
2、抛出异常:raise 异常类对象()  # 按照要求,实参和形参个数一致
3、捕获异常:(同系统异常写法)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值