python基础学习21_异常(异常传递、自定义异常)

# -*- encoding: utf-8 -*-
"""
# **异常**
1、含义:当检测到一个错误,解释器无法执行下去,并出现一些错误提示,即为异常。
2、语法:
try:
    可能发生错误的代码
except [Exception as 变量]:
    出现异常执行的代码(打印变量)
else:
     未出现异常时执行的代码
finally:
    有没有异常都要执行的代码
3、异常传递,即异常嵌套
4、自定义异常
   4.1、继承父类Exception
   4.2、抛出异常 raise 自定义异常类()
   4.3、try except捕获抛出的异常
"""

'''
try:
    可能发生错误的代码
except:
    出现异常执行的代码
'''
# 1、简单体验异常
try:
    open('text100.txt')
except:
    print('text100.txt不存在')
# text100.txt不存在


# 2、捕获指定异常及异常描述信息:

# 执行print(a),a未定义,所以报错。NameError: name 'a' is not defined
# 其中NameError是异常类型;name 'a' is not defined是异常信息。
'''
try:
    可能发生错误的代码
except 异常类型 as 变量:
    出现异常执行的代码(打印变量)
'''
try:
    print(a)
# 如果异常是NameError,报错;如果出现其他异常,不报错。
# 异常描述信息捕获后放在result
except NameError as result:
    print(result)  # name 'a' is not defined


# 3、捕获多个异常
# 多个异常以元组的方式进行书写,放在except后
'''
try:
    可能发生错误的代码
except (异常类型1,异常类型2,...) as 变量:
    出现异常执行的代码(打印变量)
'''
try:
    print(5/0)
# 如果执行的代码发生元组中任意一种异常,都会被捕获,如果是其他异常,不会被捕获。
except (ZeroDivisionError, NameError) as result:
    print(result)  # division by zero

# 4、捕获所有异常
# Exception是所有程序异常类的父类!!!
'''
try:
    可能发生错误的代码
except Exception as 变量:
    出现异常执行的代码(打印变量)
'''
try:
    print(5/0)
except Exception as result:
    print(result)  # division by zero

# 5、异常中的else
'''
try:
    可能发生错误的代码
except Exception as 变量:
    出现异常执行的代码(打印变量)
else:
     未出现异常时执行的代码
'''
try:
    print(5/2)
except Exception as result:
    print(result)
else:
    print('没有发生异常,真开心!')
# 2.5
# 没有发生异常,真开心!


# 5、异常中的finally
'''
try:
    可能发生错误的代码
except Exception as 变量:
    出现异常执行的代码(打印变量)
else:
     未出现异常时执行的代码
finally:
    有没有异常都要执行的代码
'''

try:
    f = open('test.txt')
except Exception as ex:
    f = open('test.txt', 'w')
    print(ex)
else:
    print('没有发生异常,真开心!')
finally:
    f.close()

# 5、异常传递
import time
try:
    f = open('test.txt')
    try:
        while True:
            # 循环读取文件内容
            con = f.readline()
            if len(con) == 0:
                break
            # 休眠2秒
            time.sleep(2)
            print(con)
    except:
        print('读取程序意外终止')
except:
    print('文件不存在')


# 6、自定义异常
# 需求:用户输入密码,如果密码小于6位,抛出异常,并打印密码长度不足6位


# 自定义异常类,继承Exception,定义魔法方法init和str(设置异常描述信息)
class ShortPassError(Exception):
    def __init__(self, len, min_len):
        self.len = len
        self.min_len = min_len

    # 设置异常描述信息
    def __str__(self):
        return f'密码长度为{self.len},小于最小长度{self.min_len}'


def main():
    try:
        # 用户输入密码
        password = input('请输入您的密码:')
        # 判断输入密码的长度是否大于最小长度,小于,则抛出异常
        if len(password) < 6:
            # 异常对象,返回魔法方法str中的异常描述信息
            raise ShortPassError(len(password), 6)
    # 捕获异常信息
    except Exception as result:
        print(result)
    # try中的代码正常执行,无异常,执行else
    else:
        print('密码输入完成!')


main()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值