python进阶语法---异常处理

在 Python 中,异常处理是一种机制,用于处理程序运行时可能发生的错误,以确保程序能够优雅地处理错误情况,而不是直接崩溃。异常处理机制的核心是使用 tryexceptelsefinally 语句。

一、基础语法

异常处理的基本语法如下:

try:
    # 可能会引发异常的代码
    risky_code()
except SomeException as e:
    # 处理异常的代码
    print(f"An error occurred: {e}")
else:
    # 没有异常发生时执行的代码
    print("No errors occurred.")
finally:
    # 无论是否发生异常,都会执行的代码
    print("This will run no matter what.")

基础语法解释:

  • try 块:包含可能引发异常的代码。如果没有异常发生,程序会跳过 except 块和 finally 块。
  • except 块:用于捕获和处理异常。可以指定捕获特定类型的异常,也可以捕获所有异常。通过 as e 语法,可以将异常对象赋给变量 e,以便获取更多的错误信息。
  • else 块:如果 try 块中的代码没有引发任何异常,else 块中的代码将会被执行。
  • finally 块:无论是否发生异常,finally 块中的代码都会被执行,通常用于清理资源,如关闭文件或网络连接。

下面是一个简单的异常处理示例:

python 复制代码
try:
    # 可能会出错的代码
    result = 10 / 0
except ZeroDivisionError as err:
    # 捕获 ZeroDivisionError 异常,并将异常对象赋值给 err 变量
    print("发生了除零错误:", err)
finally:
    # 在异常处理之后执行
    print("程序结束")
 

在上面的示例中,由于除法运算尝试将一个数除以零,会触发 ZeroDivisionError 异常,程序会跳转到 except 语句块中进行异常处理,并输出错误信息 "发生了除零错误: division by zero",最后无论是否发生异常,都会执行 finally 语句块中的代码,输出 "程序结束"。

你可以在一个 except 块中捕获多个异常 类型,也可以使用多个 except 块:

try:
    # 代码块
    pass
except (TypeError, ValueError) as e:
    print(f"An error occurred: {e}")
except ZeroDivisionError as e:
    print(f"Division error: {e}")

二、自定义异常

在Python中,我们可以自定义异常类来处理特定的错误情况。自定义异常类可以继承自内置的 Exception 类或其子类。

下面是一个简单的自定义异常类示例:

python 复制代码
class CustomError(Exception):
    pass

在上面的示例中,我们定义了一个名为 CustomError 的异常类,该类继承自 Exception 类。通过这样的定义,我们可以创建属于 CustomError 类的异常对象,并使用它们来触发和捕获自定义的异常。

下面是一个使用自定义异常类的示例:

python 复制代码
class CustomError(Exception):
    pass

def divide_by_zero(num):
    if num == 0:
        raise CustomError("除数不能为零")
    else:
        return 10 / num

try:
    result = divide_by_zero(0)
except CustomError as err:
    print("捕获到自定义异常:", err)

在上面的示例中,我们定义了一个名为 divide_by_zero 的函数,该函数接受一个参数 num。如果 num 的值为零,则会手动触发一个 CustomError 异常。在 try 语句块中,我们调用 divide_by_zero 函数并传入零作为参数,由于除数为零,会触发自定义异常,并将异常对象赋值给 err 变量。最后,我们捕获到了自定义异常,并打印出错误信息 "捕获到自定义异常: 除数不能为零"。

通过自定义异常,我们可以根据程序的需求和特定的错误情况来扩展异常处理的能力。

三、raise语句

在Python中,raise 语句用于手动触发或引发异常。

python 复制代码
# 引发 ValueError 异常
raise ValueError("无效的值")

# 引发自定义异常
class CustomError(Exception):
    pass
raise CustomError("自定义异常")

# 引发异常并使用默认的错误消息
raise TypeError
 

raise 语句通常会与 tryexcept 语句一起使用,以便能够在异常发生时捕获并处理它们。这样,我们可以根据具体情况选择在何处引发异常,并在适当的地方进行异常处理。

相关推荐
轻口味41 分钟前
命名空间与模块化概述
开发语言·前端·javascript
晓纪同学2 小时前
QT-简单视觉框架代码
开发语言·qt
威桑2 小时前
Qt SizePolicy详解:minimum 与 minimumExpanding 的区别
开发语言·qt·扩张策略
飞飞-躺着更舒服2 小时前
【QT】实现电子飞行显示器(简易版)
开发语言·qt
明月看潮生2 小时前
青少年编程与数学 02-004 Go语言Web编程 16课题、并发编程
开发语言·青少年编程·并发编程·编程与数学·goweb
明月看潮生2 小时前
青少年编程与数学 02-004 Go语言Web编程 17课题、静态文件
开发语言·青少年编程·编程与数学·goweb
Java Fans2 小时前
C# 中串口读取问题及解决方案
开发语言·c#
盛派网络小助手2 小时前
微信 SDK 更新 Sample,NCF 文档和模板更新,更多更新日志,欢迎解锁
开发语言·人工智能·后端·架构·c#
算法小白(真小白)2 小时前
低代码软件搭建自学第二天——构建拖拽功能
python·低代码·pyqt
唐小旭2 小时前
服务器建立-错误:pyenv环境建立后python版本不对
运维·服务器·python