异常处理

本文详细介绍了Python中的异常处理机制,包括错误分类、异常处理的作用和方式。重点讲解了异常处理的五种结构:单分支、多分支、万能异常、多分支+万能异常以及try...else...finally结构,并提供了示例代码。此外,还涉及了如何主动触发异常、使用assert断言以及自定义异常的方法,旨在提升代码的健壮性和容错性。
摘要由CSDN通过智能技术生成

异常处理

错误的分类
1.语法错误 2.逻辑错误、
异常处理只能处理代码的逻辑错误。

异常的定义
代码发生异常错误之后,程序被中断。

异常处理定义
当代码出现异常时,通过某种方法不让程序中断,合理的“跳过”异常。

异常处理的作用
1.用户体验良好
2.是代码更有健壮性和容错性

异常处理的两种方式
1.if 只能处理简单异常
2.try 异常处理的常用方式

try:
    # doc = {"name": "MB", "age": 25}
    # salary = doc["salary"]

    num = input(">>>")
    num = int(num)


except KeyError:
    print("没有该键")

except ValueError:
    print("请输入数字")

注意,当出现异常后程序直接转到异常处理对应部分代码,不再执行异常之后的代码内容


异常处理的几种结构

结构1:单分支
处理单个异常的异常处理

try:
    num = input(">>>")
    num = int(num)

except ValueError:
    print("请输入数字")

结构2:多分支

try:
    doc = {"name": "MB", "age": 25}
    salary = doc["salary"]

    num = input(">>>")
    num = int(num)

    l1 = [1, 2, 3]
    print(l1[100])
except KeyError:
    print("没有该键")

except ValueError:
    print("请输入数字")

except IndexError:
    print("请输入正确索引")

结构3:万能异常处理
except后不带异常类型,可以处理所有python识别的异常

try:
    doc = {"name": "MB", "age": 25}
    salary = doc["salary"]

    num = input(">>>")
    num = int(num)

    l1 = [1, 2, 3]
    print(l1[100])
	
except Exception:
    pass

可以打印异常内容

try:
    doc = {"name": "MB", "age": 25}
    salary = doc["salary"]

    num = input(">>>")
    num = int(num)

    l1 = [1, 2, 3]
    print(l1[100])

except Exception as e:
    print(e)

什么时候用万能异常,什么时候用多分支

如果对错误信息不关心,只是先排除错误让程序继续运行,则用万能异常。
如果要根据错误信息进行明确分流,让程序多元化开发则用多分支。


结构4:多分支+万能异常

try:
    doc = {"name": "MB", "age": 25}
    salary = doc["salary"]

    num = input(">>>")
    num = int(num)

    l1 = [1, 2, 3]
    print(l1[100])
    
except KeyError:
    print("没有该键")

except ValueError:
    print("请输入数字")

except IndexError:
    print("请输入正确索引")

except Exception as e:
    print(e)
    print("程序出现意料之外的错误")

这种结构可以保证程序不会因为出现意料之外的异常而意外终止。最常用


结构5:try else finally

try:
    doc = {"name": "MB", "age": 25}
    salary = doc["name"]

    num = input(">>>")
    num = int(num)

    l1 = [1, 2, 3]
    print(l1[100])

except KeyError:
    print("没有该键")

except ValueError:
    print("请输入数字")

else:
    print("程序未出现异常")

finally:
    print("finally执行啦")

except的作用是出现异常如何运行

else的作用是未出现异常如何运行

finally内容会在异常升起前运行

except必须有try,else必须有try和except,finally只需要有try

finally作用:在异常升起之前、在break之前、在return之前执行,可以用于关闭数据库连接,数据保存,文件句柄关闭等必须要执行的操作之中。

with open("test", encoding="utf-8", mode="r+") as f:
    try:
        for i in f.readlines():
            print(i, end="")
            if i > 1:#这里会报错,但在报错前先运行finally下代码块
                print("运行")

    finally:
        print("finally运行")
        f.close()

主动触发异常

raise ValueError("出现了Value错误")

断言
通过assert判断,展现出一种强硬的态度,当assert条件为真的时候才运行接下来的部分代码,如果assert条件为假,则直接出发AssertionError异常。

a = 1
assert a == 3
print("正常运行")

自定义异常
python中给提供的错误类型很多,但不是全部的错误,有一些错误没有错误类型,可以自己定义错误类型。

class SelfDefinition(BaseException):
    def __init__(self, msg):
        self.msg = msg

    def __str__(self): # 打印该类的实例的时候出发__str__
        return self.msg


try:
    raise SelfDefinition("自定义类型错误")
except SelfDefinition as e:# e = SelfDefinition("自定义类型错误")
    print(e) # 触发__str__
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值