Python中try用法、内置异常类型与自定义异常类型拓展案例详解
目录
- try介绍与语法格式
- try具体使用案例
- except的异常类型
- 简介
- 案例
- 内置的常见异常类型
- 自定义异常类型
- 继承关系
- 用途
- 注意事项
try介绍与语法格式
在 python 里,try
语句主要用于异常处理,其作用是捕获并处理代码运行期间可能出现的异常,避免程序因异常而意外终止。try
语句通常会和 except
、else
以及 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: printhboIa(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的异常类型
简介
在 Pythjavascripton 里,try-except
语句会依据 try
代码块抛出的异常类型来判定执行哪个 except
子句。当 try
代码块出现异常时,Python 会按顺序javascript检查每个 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
子句,进而执行该子句里的代码,输出 “执行了 Zero编程DivisionError
异常处理”。
内置的常见异常类型
以下是Python中常见的可被except
捕获的内置异常类型汇总表格(基于Exception
基类体系):
自定义异常类型
自定义异常需要继承自 Python 的内置异常类,通常是 Exception
类。下面是一个自定义异常的示例:
# 定义一个自定义异常类 class MyCustomError(Exception): pass try: # 模拟抛出自定义异常 raise MyCustomError("这是一个自定义异常") except MyCustomError as e: javascript print(f"捕获到自定义异常: {e}")
在上述代码中,MyCustomError
是自定义的异常类,它继承自 Exception
类。在 try
代码块中使用 raise
关键字抛出这个自定义异常,然后在 except
语句中捕获并处理它。
继承关系
Exception
类继承自 BaseException
,不过像 SystemExit
、KeyboardInterrupt
和 GeneratorExit
这类系统退出相关的异常直接继承自 BaseException
,而非 Exception
。这意味着 Exception
类涵盖的是常规的程序运行时错误,并非用于处理系统层面的退出事件。
用途
- 捕获通用异常:在编写代码时,若不确定会出现哪种具体的异常,可使用
Exception
类来捕获所有常规异常。 - 创建自定义异常:可以通过继承
Exception
类来创建自定义的异常类,从而在特定场景下抛出这些自定义异常。
注意事项
- 慎用
except Exception
:虽然except Exception
能捕获所有常规异常,但可能会掩盖一些本应被关注的特定异常,使调试变得困难。因此,在可能的情况下,最好捕获具体的异常类型。 - 自定义异常的命名:自定义异常类的命名应清晰地反映其用途,通常以
Error
结尾,比如DatabaseError
、ValidationError
等。
到此这篇关于Python中try用法、内置异常类型与自定义异常类型拓展的文章就介绍到这了,更多相关Python try用法内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!
精彩评论