Python基础入门——异常处理

发布于:2023-01-10 ⋅ 阅读:(423) ⋅ 点赞:(0)


活动地址:CSDN21天学习挑战赛

除零异常

i = input('请输入数字:')
print(10/int(i))

在这里插入图片描述

捕获异常

try-except语句

try:
    <可能会引发异常的语句>
except[异常类型]:
    <处理异常>

异常类型可省略。

无异常,则结束;有异常,则执行except代码块。

i = input('请输入数字:')
try:
    print(10/int(i))
except ZeroDivisionError as e:
    print("不能除以0,异常:{}".format(e))

在这里插入图片描述

多个except代码块

try:
    <可能会引发异常的语句>
except 异常类型1:
    <处理异常>
except 异常类型2:
    <处理异常>
...
except:
    <处理异常>

多个except代码块根据异常类型匹配到不同的except代码块

省略异常类型的except代码块是默认的except代码块,它只能被放到最后,捕获上面没有匹配到的

i = input('请输入数字:')
try:
    print(10/int(i))
except ZeroDivisionError as e:
    print("不能除以0,异常:{}".format(e))
except ValueError as e:
    print("输入的是无效数字,异常:{}".format(e))

在这里插入图片描述

多重异常捕获

i = input('请输入数字:')
try:
    print(10/int(i))
except (ZeroDivisionError,ValueError) as e:
    print("异常发生:{}".format(e))

在这里插入图片描述

try-except语句嵌套

i = input('请输入数字:')
try:
    j = int(i)
    try:
        print(10/j)
    except ZeroDivisionError as e1:
        print("不能除以0,异常:{}".format(e1))
except ValueError as e2:
    print("输入的是无效数字,异常:{}".format(e2))

在这里插入图片描述

使用finally代码块释放资源

有时在try-except语句中会占用一些资源,可以使用finally代码块。

try:
    <可能会引发异常的语句>
except 异常类型1:
    <处理异常>
except 异常类型2:
    <处理异常>
...
except:
    <处理异常>
finally:
    <释放资源>
i = input('请输入数字:')
try:
    print(10/int(i))
except ZeroDivisionError as e:
    print("不能除以0,异常:{}".format(e))
except ValueError as e:
    print("输入的是无效数字,异常:{}".format(e))
finally:
    print('释放资源')

在这里插入图片描述

自定义异常类

class zhangsan(Exception):
    def __init__(self,message):
        super().__init__(message)

手动引发异常

前面所接触到的异常都是由于解释器引发的,我们也可以通过raise语句手动引发异常。

class zhangsan(Exception):
    def __init__(self,message):
        super().__init__(message)

i = input('请输入数字:')
try:
    print(10/int(i))
except ZeroDivisionError as e:
    # print("不能除以0,异常:{}".format(e))
    raise zhangsan('不能除以0')
except ValueError as e:
    # print("输入的是无效数字,异常:{}".format(e))
    raise zhangsan('输入的是无效数字')

在这里插入图片描述