Python的异常处理

异常处理是编程中非常重要的一部分,它允许程序在出现错误或异常情况时采取适当的措施,以避免程序崩溃或提供更好的用户体验。在Python中,异常处理通过tryexceptelsefinally语句来实现。

异常处理语句

  1. try :这是异常处理的开始。在try块中的代码是可能会引发异常的代码。

  2. except :如果在try块中抛出了异常,控制流将转到except块。except块用于捕获并处理特定类型的异常。可以有多个except块来捕获不同类型的异常。

  3. elseelse块在try块没有异常发生时执行。它是一个可选部分。

  4. finallyfinally块总是在try块执行完毕后执行,无论是否发生异常。finally块通常用于执行清理工作,如关闭文件或释放资源。

try-except语句:

python 复制代码
try:
    # 可能引发异常的代码块
    result = 10 / 0  # 引发ZeroDivisionError异常
except ZeroDivisionError:
    # 异常处理代码块
    print("除零错误发生")
  • try块中包含可能会引发异常的代码。
  • 如果try块中的代码引发了指定类型的异常,程序将跳转到相应的except块进行处理。
  • 如果try块中的代码未引发异常,则跳过相应的except块。
  • 可以在一个try语句中包含多个except块,以处理不同类型的异常。

else语句:

python 复制代码
try:
    # 可能引发异常的代码块
    result = 10 / 2
except ZeroDivisionError:
    # 异常处理代码块
    print("除零错误发生")
else:
    # 没有发生异常时执行的代码块
    print("计算结果:", result)
  • else块中的代码只在try块中的代码未引发异常时执行。

finally语句:

python 复制代码
try:
    # 可能引发异常的代码块
    result = 10 / 2
except ZeroDivisionError:
    # 异常处理代码块
    print("除零错误发生")
else:
    # 没有发生异常时执行的代码块
    print("计算结果:", result)
finally:
    # 无论是否发生异常都会执行的代码块
    print("执行完毕")
  • finally块中的代码无论是否发生异常都会执行,通常用于释放资源或清理操作。

异常类型捕获:

python 复制代码
try:
    # 可能引发异常的代码块
    result = 10 / 0
except ZeroDivisionError:
    # 异常处理代码块
    print("除零错误发生")
except ArithmeticError:
    # 捕获除零错误以外的算术错误
    print("算术错误发生")
except Exception as e:
    # 捕获其他类型的异常,并将异常对象存储在变量e中
    print("发生异常:", e)
  • 可以使用多个except块来捕获不同类型的异常,将最具体的异常放在前面,最一般的异常放在后面。
  • 可以使用as关键字将捕获的异常对象存储在变量中,以便后续处理。

捕获多个异常

python 复制代码
try:
    # 可能会引发多种异常的代码
    some_risky_operation()
except (TypeError, ValueError) as e:
    # 同时捕获多个类型的异常
    print("Caught an exception:", e)

抛出异常:

python 复制代码
def divide(x, y):
    if y == 0:
        raise ZeroDivisionError("除数不能为零")
    return x / y

try:
    result = divide(10, 0)
except ZeroDivisionError as e:
    print("发生异常:", e)
  • 可以使用raise语句手动抛出异常,提供异常类型和异常消息。

自定义异常:

python 复制代码
class MyError(Exception):
    def __init__(self, message):
        self.message = message

try:
    raise MyError("自定义异常")
except MyError as e:
    print("发生自定义异常:", e.message)
  • 可以通过继承Exception类来自定义异常。

自定义嵌套异常:

python 复制代码
def zer() -> int:
    try:
        1 / 0
    except:
        raise MyCustomError("Custom error message")
        
'''调用example()后输出:Caught a custom exception: Custom error message'''
def example():
    try:
        zer()
    except MyCustomError as e:
        print("Caught a custom exception:", e)

总结

异常处理是Python编程中的一个重要部分,它提供了一种结构化的错误管理方式。通过使用try、except、else和finally语句,可以编写更健壮、更易于维护的代码。理解异常处理的工作原理和如何使用它们可以帮助在程序中更有效地处理错误和异常情况。

相关推荐
钮钴禄·爱因斯晨6 分钟前
C语言 | 函数核心机制深度解构:从底层架构到工程化实践
c语言·开发语言·数据结构
wkj0018 分钟前
php中array($this, ‘loadClass‘)表示啥意思?
android·开发语言·php
Stuomasi_xiaoxin8 分钟前
服务器重装后如何“复活”旧硬盘上的 Anaconda 环境?—— 一次完整的排错与恢复记录
开发语言·python·github
这里有鱼汤13 分钟前
一招横盘突破选股法,赚钱不靠运气靠图形,靠概率!
后端·python
0wioiw033 分钟前
Ubuntu基础(Python虚拟环境和Vue)
linux·python·ubuntu
xiao5kou4chang6kai443 分钟前
Python-GEE遥感云大数据分析与可视化(如何建立基于云计算的森林监测预警系统)
python·数据分析·云计算·森林监测·森林管理
presenttttt1 小时前
用Python和OpenCV从零搭建一个完整的双目视觉系统(四)
开发语言·python·opencv·计算机视觉
每日出拳老爷子1 小时前
[C#] 使用TextBox换行失败的原因与解决方案:换用RichTextBox的实战经验
开发语言·c#
半桔1 小时前
【Linux手册】从接口到管理:Linux文件系统的核心操作指南
android·java·linux·开发语言·面试·系统架构
nightunderblackcat1 小时前
新手向:实现ATM模拟系统
java·开发语言·spring boot·spring cloud·tomcat·maven·intellij-idea