Python中try用法、内置异常类型与自定义异常类型拓展案例详解

 更新时间:2025年04月14日 09:15:44   作者:脱脱克克  
在 Python 里,try 语句主要用于异常处理,其作用是捕获并处理代码运行期间可能出现的异常,避免程序因异常而意外终止,这篇文章主要介绍了Python中try用法、内置异常类型与自定义异常类型拓展,需要的朋友可以参考下

try介绍与语法格式

在 Python 里,try 语句主要用于异常处理,其作用是捕获并处理代码运行期间可能出现的异常,避免程序因异常而意外终止。try 语句通常会和 exceptelse 以及 finally 子句搭配使用。具体语法框架如下:

try:
    # 可能会引发异常的代码块
    pass
except ExceptionType1:
    # 处理特定类型异常的代码块
    pass
except ExceptionType2:
    # 处理另一种特定类型异常的代码块
    pass
else:
    # 当 try 代码块没有引发异常时执行的代码块
    pass
finally:
    # 无论 try 代码块是否引发异常,都会执行的代码块
    pass

在 Python 里,pass 是一个空语句,它不执行任何操作,主要用于占位,保证代码的语法完整性。

try具体使用案例

下面结合前面读取 .xlsx 文件的代码详细讲解其用法:

import openpyxl
def read_xlsx(file_path):
    try:
        # 以二进制模式打开 .xlsx 文件
        workbook = openpyxl.load_workbook(file_path)
        # 获取活动工作表
        sheet = workbook.active
        # 遍历工作表中的每一行
        for row in sheet.iter_rows(values_only=True):
            print(row)
    except FileNotFoundError:
        print(f"错误:未找到文件 {file_path}。")
    except Exception as e:
        print(f"发生未知错误:{e}")
if __name__ == "__main__":
    file_path = 'example.xlsx'
    read_xlsx(file_path)
  • try 代码块包含了可能会引发异常的代码。在这个例子中,openpyxl.load_workbook(file_path)
  • 尝试打开指定路径的 .xlsx 文件,若文件不存在或者文件格式有误,就可能会引发异常。
  • 后续的代码如获取活动工作表和遍历工作表中的行,在文件打开成功后执行,同样可能会因为文件内容不规范等原因引发异常。
  • except FileNotFoundError:专门处理FileNotFoundError异常,也就是当指定的文件不存在时,会执行该代码块中的语句,打印出错误信息。
  • except Exception as e:这是一个通用的异常处理块,会捕获除 FileNotFoundError之外的其他所有异常,并将异常信息存储在变量 e 中,然后打印出未知错误信息。

except的异常类型

简介

在 Python 里,try-except 语句会依据 try 代码块抛出的异常类型来判定执行哪个 except 子句。当 try 代码块出现异常时,Python 会按顺序检查每个 except 子句,查看其指定的异常类型是否与抛出的异常类型相匹配。若匹配成功,就会执行该 except 子句里的代码。

案例

下面给出一个示例,借助打印信息来明确执行了哪个 except 子句:

try:
    # 可能会引发异常的代码块
    result = 1 / 0  # 这里会引发 ZeroDivisionError
except ZeroDivisionError:
    # 处理特定类型异常的代码块
    print("执行了 ZeroDivisionError 异常处理")
except ValueError:
    # 处理另一种特定类型异常的代码块
    print("执行了 ValueError 异常处理")
else:
    # 当 try 代码块没有引发异常时执行的代码块
    print("try 代码块没有引发异常")
finally:
    # 无论 try 代码块是否引发异常,都会执行的代码块
    print("finally 代码块始终会执行")

在这个示例中,try 代码块里的 1 / 0 会引发 ZeroDivisionError 异常。所以,Python 会检查各个 except 子句,发现 ZeroDivisionError 匹配第一个 except 子句,进而执行该子句里的代码,输出 “执行了 ZeroDivisionError 异常处理”。

内置的常见异常类型

以下是Python中常见的可被except捕获的内置异常类型汇总表格(基于Exception基类体系):

自定义异常类型

自定义异常需要继承自 Python 的内置异常类,通常是 Exception 类。下面是一个自定义异常的示例:

# 定义一个自定义异常类
class MyCustomError(Exception):
    pass
try:
    # 模拟抛出自定义异常
    raise MyCustomError("这是一个自定义异常")
except MyCustomError as e:
    print(f"捕获到自定义异常: {e}")

在上述代码中,MyCustomError 是自定义的异常类,它继承自 Exception 类。在 try 代码块中使用 raise 关键字抛出这个自定义异常,然后在 except 语句中捕获并处理它。

继承关系

Exception 类继承自 BaseException,不过像 SystemExitKeyboardInterruptGeneratorExit 这类系统退出相关的异常直接继承自 BaseException,而非 Exception。这意味着 Exception 类涵盖的是常规的程序运行时错误,并非用于处理系统层面的退出事件。

用途

  • 捕获通用异常:在编写代码时,若不确定会出现哪种具体的异常,可使用 Exception 类来捕获所有常规异常。
  • 创建自定义异常:可以通过继承 Exception 类来创建自定义的异常类,从而在特定场景下抛出这些自定义异常。

注意事项

  • 慎用 except Exception:虽然 except Exception 能捕获所有常规异常,但可能会掩盖一些本应被关注的特定异常,使调试变得困难。因此,在可能的情况下,最好捕获具体的异常类型。
  • 自定义异常的命名:自定义异常类的命名应清晰地反映其用途,通常以 Error 结尾,比如DatabaseErrorValidationError 等。

到此这篇关于Python中try用法、内置异常类型与自定义异常类型拓展的文章就介绍到这了,更多相关Python try用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python正则表达式指南 推荐

    Python正则表达式指南 推荐

    本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例。本文的内容不包括如何编写高效的正则表达式、如何优化正则表达式,这些主题请查看其他教程。
    2018-10-10
  • 在多种情况/开发环境中运行python脚本和代码的技巧分享

    在多种情况/开发环境中运行python脚本和代码的技巧分享

    Python脚本或程序是包含可执行Python代码的文件,能够运行Python脚本和代码可能是您作为Python开发人员所需的最重要的技能,在本教程中,您将学习一些运行Python脚本和代码的技术,在每种情况下使用的技术将取决于您的环境、平台、需求和技能
    2023-11-11
  • Python中的a=value1 or value2详解

    Python中的a=value1 or value2详解

    Python中的`a=valueor0`是一种简洁的方式来为变量提供默认值,利用了Python的布尔上下文和短路求值机制,如果`value`是“真值”,则`a`被赋值为`value`;如果`value`是“假值”,则`a`被赋值为0
    2024-12-12
  • python基于itchat模块实现微信防撤回

    python基于itchat模块实现微信防撤回

    这篇文章主要为大家详细介绍了python实现微信防撤回,基于itchat模块,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-04-04
  • 16个python常用魔法函数小结

    16个python常用魔法函数小结

    本文主要介绍了16个python常用魔法函数小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • 浅谈Python2.6和Python3.0中八进制数字表示的区别

    浅谈Python2.6和Python3.0中八进制数字表示的区别

    下面小编就为大家带来一篇浅谈Python2.6和Python3.0中八进制数字表示的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • Python处理数据之匹配两个Excel文件数据的实现方法

    Python处理数据之匹配两个Excel文件数据的实现方法

    这篇文章主要给大家介绍了关于Python处理数据之匹配两个Excel文件数据的实现方法,可以使用Python的Pandas库来实现两层循环匹配两个Excel文件,需要的朋友可以参考下
    2023-09-09
  • Django中的AutoField字段使用

    Django中的AutoField字段使用

    这篇文章主要介绍了Django中的AutoField字段使用,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • python中Matplotlib实现绘制3D图的示例代码

    python中Matplotlib实现绘制3D图的示例代码

    本篇文章主要介绍了python中Matplotlib实现绘制3D图的示例代码,具有一定的参考价值,有兴趣的可以了解一下
    2017-09-09
  • 使用python接入微信聊天机器人

    使用python接入微信聊天机器人

    这篇文章主要为大家详细介绍了使用python接入微信聊天机器人,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-06-06

最新评论