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语句,可以编写更健壮、更易于维护的代码。理解异常处理的工作原理和如何使用它们可以帮助在程序中更有效地处理错误和异常情况。

相关推荐
铅笔侠_小龙虾7 小时前
Rust 学习(4)-函数与注释
开发语言·学习·rust
tiana_7 小时前
写了个零依赖的 Go 版本管理器,curl | bash 完事
开发语言·golang·bash
嘘嘘出差7 小时前
Python 爬虫入门实战:爬取豆瓣电影 Top 250
开发语言·爬虫·python
爱写代码的倒霉蛋7 小时前
实现协程的三种方式
开发语言·python
崖边看雾8 小时前
记录Python学习——第一章环境安装下载(Windows)
windows·python·学习·pycharm
CS创新实验室8 小时前
NumPy数组的C风格和Fortran风格
c语言·开发语言·numpy
用户298698530148 小时前
Python 实现 Excel 到 ODS、XPS、PostScript 及 PDF/A-1b 的格式转换
后端·python·excel
本地化文档8 小时前
xlwings-docs-l10n
python·github·excel·gitcode·sphinx
逝水无殇9 小时前
C# 正则表达式详解
开发语言·后端·正则表达式·c#
朱永博9 小时前
使用Onnruntime实现Padim/Patchcore推理
开发语言·c#