Python面试题:在 Python 中,如何处理异常?

server/2024/10/21 11:32:01/

在 Python 中,异常处理是编写健壮代码的重要部分。Python 提供了 tryexceptelsefinally 关键字来捕获和处理异常。以下是对这些关键字及相关知识点的详细解析。

异常处理基本语法

try-except

try 块用于包裹可能引发异常的代码,except 块用于捕获并处理这些异常。

python">try:# 可能引发异常的代码result = 10 / 0
except ZeroDivisionError:# 处理异常print("除零错误")
捕获多个异常

可以通过多个 except 块捕获不同类型的异常,或者在一个 except 块中捕获多个异常。

python">try:# 可能引发异常的代码result = 10 / 0
except ZeroDivisionError:print("除零错误")
except ValueError:print("值错误")
except (TypeError, KeyError):print("类型错误或键错误")
获取异常信息

可以使用 except 块中的 as 关键字获取异常对象,从而获取详细的异常信息。

python">try:result = 10 / 0
except ZeroDivisionError as e:print(f"捕获到异常:{e}")
try-except-else

else 块在 try 块没有引发异常时执行。通常用于那些需要在没有异常时运行的代码。

python">try:result = 10 / 2
except ZeroDivisionError:print("除零错误")
else:print(f"结果是:{result}")
try-except-finally

finally 块中的代码无论是否发生异常都会执行。通常用于清理操作,如关闭文件或释放资源。

python">try:file = open('example.txt', 'r')data = file.read()
except FileNotFoundError:print("文件未找到")
finally:file.close()print("文件已关闭")

自定义异常

可以通过创建继承自 Exception 类的新类来自定义异常。

python">class CustomError(Exception):passtry:raise CustomError("这是一个自定义错误")
except CustomError as e:print(f"捕获到自定义异常:{e}")

上下文管理器

上下文管理器(使用 with 语句)可以简化资源管理,如文件操作,确保在使用完资源后自动清理。

python">with open('example.txt', 'r') as file:data = file.read()
# 不需要显式调用 file.close(),会自动关闭

详细解析

异常层级结构

Python 中的异常有一个层级结构,所有内置异常类都继承自 BaseException,常见的异常类包括:

  • Exception:所有内置非系统退出的异常的基类。
  • ArithmeticError:所有算术错误的基类,如 ZeroDivisionError
  • LookupError:所有查找错误的基类,如 IndexErrorKeyError

通过理解异常的层级结构,可以更精确地捕获特定的异常或更广泛地捕获一类相关的异常。

捕获所有异常

虽然不建议这样做,但可以使用 except 捕获所有异常。这样做通常会隐藏问题,应尽量避免。

python">try:result = 10 / 0
except Exception as e:print(f"捕获到异常:{e}")
抛出异常

可以使用 raise 关键字手动抛出异常。

python">def check_positive(number):if number <= 0:raise ValueError("数字必须是正数")return numbertry:check_positive(-10)
except ValueError as e:print(f"捕获到异常:{e}")
链式异常

在异常处理过程中,可以使用 raise ... from 语法将一个异常与另一个异常关联起来,形成链式异常。

python">def func1():raise ValueError("原始错误")def func2():try:func1()except ValueError as e:raise RuntimeError("处理 func1 时出错") from etry:func2()
except RuntimeError as e:print(f"捕获到异常:{e}")print(f"原始异常:{e.__cause__}")

实际应用示例

以下是一个实际应用中常见的异常处理示例,包括文件操作和自定义异常。

python">class InvalidFileError(Exception):passdef read_file(filename):if not filename.endswith('.txt'):raise InvalidFileError("仅支持 .txt 文件")try:with open(filename, 'r') as file:return file.read()except FileNotFoundError:print("文件未找到")except InvalidFileError as e:print(f"自定义异常:{e}")except Exception as e:print(f"其他异常:{e}")finally:print("结束文件读取操作")# 测试代码
try:content = read_file('example.pdf')
except InvalidFileError as e:print(f"捕获到自定义异常:{e}")

总结

Python 提供了强大且灵活的异常处理机制,通过 tryexceptelsefinally 关键字,结合自定义异常和上下文管理器,可以编写出健壮和易于维护的代码。理解和应用这些机制对于提高代码质量和处理错误具有重要意义。


http://www.ppmy.cn/server/54403.html

相关文章

SQL MINUS 运算符:查找数据集之间的差异

在 SQL 中&#xff0c;MINUS 运算符在查询中起着至关重要的作用&#xff0c;它允许开发人员识别和检索存在于一个数据集中但不存在于另一个数据集中的记录。本文探讨了 SQL 中 MINUS 运算符的功能、用法和实际应用&#xff0c;强调了它在数据分析和操作任务中的重要性。 理解 …

Qt学习:Qt窗口组件以及窗口类型

一、Qt的窗口组件有哪些 Qt是一个跨平台的C应用程序开发框架&#xff0c;它的窗口组件&#xff0c;也称为用户界面元素&#xff0c;为开发者提供了丰富的可视化界面设计选项。在Qt中&#xff0c;窗口组件主要包括&#xff1a; 窗口&#xff08;Window&#xff09;&#xff1a;…

泛微开发修炼之旅--28巧用计划任务更新建模数据

文章链接&#xff1a;28巧用计划任务更新建模数据

android应用的持续构建CI(三)-- 手动签名

一、背景 关于android应用的签名及其原理&#xff0c;很多文章都有讲述&#xff0c;无意重复赘述。 本文紧接上文&#xff0c;站在运维的角度&#xff0c;对开发是透明的。 但是它又和gradle build 构建动作是紧密相关的。 第一步使用jdk的keytool生成证书文件&#xff0c;…

Python 面试【高难】

欢迎莅临我的博客 &#x1f49d;&#x1f49d;&#x1f49d;&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

# 职场生活之道:善于团结

在职场这个大舞台上&#xff0c;每个人都是演员&#xff0c;也是观众。要想在这个舞台上站稳脚跟&#xff0c;除了专业技能&#xff0c;更要学会如何与人相处&#xff0c;如何团结他人。团结&#xff0c;是职场生存的重要法则之一。 1. 主动团结&#xff1a;多一个朋友&#x…

【第六节】C/C++静态查找算法

目录 前言 一、搜索查找 二、查找算法 1. 线性查找&#xff08;Linear Search&#xff09; 2. 二分查找&#xff08;Binary Search&#xff09; 3. 插值查找&#xff08;Interpolation Search&#xff09; 4. 哈希查找&#xff08;Hash Search&#xff09; 5. Fibonacc…

蚁群优化算法(ACO)的原理Matlab旅行商TSP问题算例

一、优化问题 在满足一定条件下&#xff0c;在众多方案或参数中寻找最优方案或参数值&#xff0c;以使得某个或多个功能指标达到最优&#xff0c;或使系统的某些性能指标达到最大值或最小值。 但是当系统复杂或非线性时&#xff0c;要遍历所有参数组合寻找最优会变得很困难—…