0基础学python-16:异常处理

目录

前言

一、错误类型

 1.语法错误

 2.异常错误

 二、捕获异常

 三、抛出异常

 四、自定义异常


前言

        在 Python 中,异常处理是通过 try-except 语句来实现的,用于捕获和处理程序运行时可能发生的异常情况,以防止程序终止或崩溃。

一、错误类型

Python中的错误可以分为两种:

  • 语法错误(Syntax errors) :代码编译时的错误,不符合Python语言规则的代码会停止编译并返回 错误信息
  • 异常(Exceptions) :相较于语法错误,异常比较难发现,因为它只在代码运行时才会发生, 如类型错误、数值错误、索引错误和属性错误等49279854a4184e22af22b1e82bb70418.png

python中的异常类层级:

d05bace069be4737b98b77e1138dd0c4.png

 1.语法错误

  • 缺少起始符号或结尾符号(括号、引号等)1e6f39c1b5b94f85b870d0b1dcd2dfa3.png
  •  缩进错误718a283206be4786b901ab3251f8ff32.png
  •  关键词拼写错误98aeede7df9e4606811afd1ad57ce0f8.png

 2.异常错误

六种典型的异常:

  • 除零错误(ZeroDivisionError):除数为0 3c8b96a6ebc844c9836326911cc5cf8a.png
  •  名称错误(NameError):变量使用前未进行申明或者初始化87bc0305991e4d42a44e9cb39bf2bf22.png
  •  类型错误(TypeError):某些函数或者方法只适用于特定的数据类型,如果 对数据类型的操作不当,就会产生类型错误8517ab1c1ae143f094de9724d8dd45fa.png
  •  数值错误(ValueError):在输入类型正确的情况下,具体输入值错误3b35494fa69a4c7494445e62afd4696b.png
  •  索引错误(IndexError):超出序列长度的索引操作47aee557c5834ea0abdbe53296461b23.png
  •  属性错误(AttributeError):方法或者属性不适用该对象d8ef1094fef742f0b820fdc308c0b5eb.png

 二、捕获异常

        高级语言通常都内置了一套错误处理机制

        Python也不例外 在Python中可通过try...except...else...finally...机制捕获异常并进行处理

 处理流程图

784f9ca1244348079ed92cf70bdb3c14.png

代码实例

li = [3, 2, 4, 1, 3, 2]
try:
    # 里面放我觉得可能会出错的代码块
    li[6]
except Exception as e:
    # 出错之后你怎么处理? 略过 要么就是 打印错误
    print(e)
else:
    # 这里执行如果try的代码块没有出错才会执行
    print("try 代码块没有错误")
finally:
    # 这里的代码放try except 不管什么样的结果它都会执行
    print("这句话必选打出来")

输出

        在这段代码中 except 后用 Exception 捕获异常并判断类型然后赋值给e。使用 Exception 可以捕获几乎所有常见的异常,因为大多数内置异常类都是 Exception 的子类或者间接子类。

list index out of range
这句话必选打出来

 三、抛出异常

        当我们需要在程序中手动抛出一个异常时,可以使用 raise 语句。下面是一个简单的例子,演示如何定义一个函数,当给定的参数不符合预期时抛出一个自定义异常:

def divide_numbers(a, b):
    if b == 0:
        raise ValueError("除数不能为零!")  # 手动抛出一个 ValueError 异常
    return a / b

# 示例调用
try:
    result = divide_numbers(10, 0)  # 这里会抛出 ValueError 异常
except ValueError as e:
    print("Error occurred:", e)

 输出:

Error occurred: 除数不能为零!

        这样的手动抛出异常适用于需要明确告知调用者发生了什么错误,并且需要中断当前操作的情况。

 四、自定义异常

在Python中可以通过创建一个新的异常类来拥有自己的异常

自定义异常的原因

  • Python提供的内建异常不够用
  • 可以预估某个错误的产生

定义异常类

  • 异常类继承自 Exception 类,可以直接继承,或者间接继承

代码实例

        这段代码演示了如何定义一个自定义异常类 MyError,以及如何在特定条件下抛出这个自定义异常。

异常抛出和处理流程:

  • 当列表中的某个元素 i 被用于计算 100 / i 时,如果结果 v 小于 0,则会触发异常。
  • 异常被抛出后,程序将停止执行当前循环和后续代码,并开始寻找匹配的异常处理器(try 块的 except 子句)来处理这个异常。
class MyError(Exception):
    pass

li1 = [213, 43213, -312, 3412, 41, 313]
for i in li1:
    v = 100 / i
    print(v)
    if v < 0:
        # 抛出异常
        raise MyError("这批货有问题,纯度不够")

输出

0.4694835680751174
0.0023141184365815842
-0.32051282051282054
Traceback (most recent call last):
  File "D:\Code\Try\HomeWork3.py", line 183, in <module>
    raise MyError("这批货有问题,纯度不够")
MyError: 这批货有问题,纯度不够

  • 41
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吃什么芹菜卷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值