python—异常处理

目录

一、了解异常

二、捕获异常

2.1 捕获指定的异常

2.2 捕获多个指定异常

2.3 捕获异常的描述信息

2.4 捕获所有异常

2.5 异常中的else

2.6 异常中finally

2.7 异常的传递

四、自定义异常


一、了解异常

当解释器检测到一个错误的时候,解释器就无法正常的执行代码了,反而出现错误的提示,这种错误的提示就叫异常。

比如说:以r的方式打开一个不存在的文件

示例:

open('1.txt', 'r')

二、捕获异常

格式:

try:
    可能发生错误的代码
except:
    如果try里面的代码发生异常,就执行此处的代码

示例:

try:
    open('1.txt', 'r')
except:
    open('1.txt', 'w')
print(111111)

2.1 捕获指定的异常

格式:

try:
    可能发生错误的代码
except 异常类型:
    如果你要捕获的错误类型在上面异常中出现了,那么就执行这个代码

示例:

try:
   print(aa)
except NameError:
    print('出现NameError错误')

注意:

  • 如果尝试执行的代码的异常类型和要捕捉的异常类型不一致时,则无法捕获异常

  • 一般try下面只放一行代码

2.2 捕获多个指定异常

当捕获多个指定异常的时候,可以把要捕获的异常类型的名字,放在except后面,使用元组的方式进行书写。

示例:

try:
    print(aa)
    # 1/0
except (NameError, ZeroDivisionError):
    print('出现NameError错误')

2.3 捕获异常的描述信息

示例:

try:
    # print(aa)
    1/0
except (NameError, ZeroDivisionError) as e:
    print(e)

2.4 捕获所有异常

Exception是所有程序异常的父类

示例:

try:
    open('1.txt', 'r')
    # print(aa)
    # 1/0
except Exception as e:
    print(e)

2.5 异常中的else

示例:

try:
    # open('1.txt', 'r')
    aa = 1
    print(aa)
    # 1/0
except Exception as e:
    print(e)
else:
    print('没有错误')

2.6 异常中finally

finally表示的是无论是否有异常,都要执行的代码,比如说关闭文件操作。

示例:

try:
    f = open('1.txt', 'r')
except Exception as e:
    print(e)
    f = open('1.txt', 'w')
else:
    print('没有异常,代码正常执行')
finally:
    print('代码执行完毕')
    f.close()

2.7 异常的传递

所谓异常的传递就是指各个异常的相互嵌套

示例:

try:
    aa = 1
    try:
        # print(aa)
        1/0
    except NameError as n:
        print(n)
except Exception as e:
    print(e)

四、自定义异常

在Python中,抛出自定义异常的语法为raise异常类对象

需求:密码的长度不足,则报出异常(用户输入密码,如果说用户输入的密码长度不足3位,则抛出自定义异常,并且捕获)

示例:

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}"


def main():
    try:
        con = input('请输入密码:')
        if len(con) < 3:
            raise ShortInputError(len(con), 3)
    except Exception as e:
        print(e)
    else:
        print('长度符合要求')


if __name__ == '__main__':
    main()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值