Python异常处理

Python的异常处理是编程中非常重要的一部分,它允许程序在运行时遇到错误时优雅地处理这些错误,而不是简单地崩溃。异常处理机制包括tryexceptelsefinally等关键字,它们共同工作以捕获和处理程序中可能出现的错误。

1.异常的基本概念

在Python中,异常是程序在运行时发生的错误。当Python解释器遇到无法处理的错误时,它会抛出一个异常。如果异常没有被捕获和处理,程序将终止执行,并打印出错误信息和堆栈跟踪。

2.异常处理的基本结构

常规异常

try:
    可能发生错误的代码
except:
    如果出现异常执行的代码
#需求:尝试以`r`模式打开文件,如果文件不存在,则以`w`方式打开。
try:
    f = open('linux.txt', 'r')
except:
    f = open('linux.txt', 'w')

异常处理的基本结构由tryexcept块组成。try块中放置可能引发异常的代码,而except块则用于捕获并处理这些异常。

指定异常

try:
    # 尝试执行的代码
    result = 10 / 0
except ZeroDivisionError:
    # 如果在try块中引发了ZeroDivisionError,则执行这里的代码
    print("除数不能为0")

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

② 一般try下方只放一行尝试执行的代码。

3.捕获多种异常

你可以使用多个except块来捕获不同类型的异常,或者使用单个except块来捕获多种异常。

try:
    # 尝试执行的代码
    pass
except ZeroDivisionError:
    # 处理除数为0的异常
    print("除数不能为0")
except TypeError:
    # 处理类型错误
    print("类型错误")

# 或者使用元组来捕获多种异常
try:
    # 尝试执行的代码
    pass
except (ZeroDivisionError, TypeError):
    # 处理除数为0或类型错误的异常
    print("发生了除数为0或类型错误")

4.else和finally块

  • else块是可选的,它会在没有异常发生时执行。
  • finally块也是可选的,无论是否发生异常,finally块中的代码都会被执行。这通常用于执行清理操作,如关闭文件或释放资源。
try:
    # 尝试执行的代码
    pass
except ZeroDivisionError:
    # 处理异常
    print("除数不能为0")
else:
    # 如果没有异常发生,则执行这里的代码
    print("一切正常")
finally:
    # 无论是否发生异常,都会执行这里的代码
    print("执行清理操作")

5.抛出异常

除了捕获和处理异常外,Python还允许你使用raise语句手动抛出异常。

if x < 0:
    raise ValueError("x 不能是负数")

6.自定义异常

Python允许你通过继承内置的Exception类来创建自定义异常。

class MyCustomError(Exception):
    """自定义异常类"""
    def __init__(self, message="这是一个自定义异常"):
        self.message = message
        super().__init__(self.message)

try:
    # 触发自定义异常
    raise MyCustomError("出错了!")
except MyCustomError as e:
    print(e)

7.异常的传递

异常是具有传递性的

img

当函数func01中发生异常, 并且没有捕获处理这个异常的时候, 异常

会传递到函数func02, 当func02也没有捕获处理这个异常的时候

main函数会捕获这个异常, 这就是异常的传递性.

提示:

当所有函数都没有捕获异常的时候, 程序就会报错

利用异常具有传递性的特点, 当我们想要保证程序不会因为异常崩溃的时候,就可以在main函数中设置异常捕获, 由于无论在整个程序哪里发生异常, 最终都会传递到main函数中, 这样就可以确保所有的异常都会被捕获

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

vⅤ_Leon

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

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

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

打赏作者

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

抵扣说明:

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

余额充值