06-Python-异常

1. 异常和错误定义

错误:修改程序无法解决的

异常:修改程序可以解决的

2. 异常类

异常类的继承结构:

BaseException是所有异常类的基类

异常类主要分为4种:

1. SystemExit

2. KeyboardInterrupt

3. GeneratiorExit

4. Exception,这个异常类的子类用的多

3. 异常处理

在程序运行时,常常会遇到异常从而使程序终止报错,但有时这种情况不是想要看到的,我们要的是虽然出现异常,但保证程序仍然执行,同时对出现的异常处理

要实现这个功能,可以捕获异常并处理

1. try...except...

try:
    a = 1/0
    b = 2
except ZeroDivisionError as z: 
    print(z) #打印的是异常信息
try:
    a = 1/0
    b = 2
    print("-"*30)
    for i in b:
        print(i)

except (ZeroDivisionError,TypeError) as z:
    print(z)

(1)try语法块中,遇到异常后会去执行except,不会执行后面的代码,即便有异常也检测不到

(2)由于(1),只能检测到一种异常,故z存储的异常信息不一定是第一个异常类。 

2. try...except...except...except...

try:
    a = 1/0
    b = 2
    print("-"*30)
    for i in b:
        print(i)

except ZeroDivisionError as z:
    print(z)
except TypeError as t:
    print(t)

3. try...except...else...

try:
    a = 1/0
    b = 2
    print("-"*30)
    for i in b:
        print(i)

except (ZeroDivisionError,TypeError) as z:
    print(z)
else:
    print("meicuowu")

没有发生异常时,执行else语句块

4. try...except...else...finally...

try:
    a = 1/0
    b = 2
    print("-"*30)
    for i in b:
        print(i)

except (ZeroDivisionError,TypeError) as z:
    print(z)
else:
    print("meicuowu")
finally:
    print("wanyong")

无论是否发生异常,都会执行finally语法块

5. try...finally...

try:
    a = 1/0
    b = 2
    print("-"*30)
    for i in b:
        print(i)

finally:
    print("wanyong")

4. 手动抛出异常

raise 异常类,用于抛出异常,常常用于抛出自定义异常类,例如raise StopIteration

为什么要手动抛出异常:

因为手动抛出异常,可以终止程序的执行,例如自定义迭代器时raise StopIteration的使用

5. 自定义异常类

通常用户自定义的异常类是继承Exception类的,自定义异常类允许我们创建自己的错误类型,并为特定的代码块添加自定义的错误处理逻辑。

一般自定义异常类要实现:

  • 定义一个__init__方法:在自定义异常类中,需要定义一个初始化方法__init__,用于初始化异常信息。通常,__init__方法会接收一些参数来设置异常信息,例如错误码、错误消息等。
  • 重写__str__方法:在自定义异常类中,需要重写__str__方法,用于返回异常的描述信息。__str__方法负责定义异常对象转换为字符串时的行为。
    class MyException(Exception):
        def __init__(self):
            self.code = 23
            self.message = "我抛出的"
        def __str__(self):
            return f"{self.code}:{self.message}"
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值