Python 引发异常时遵循的最佳编程实践
正确、有效地引发异常可以让你开发出更健壮的程序和更高质量的代码。
下面是几个建议
1. 优先考虑特定异常而不是通用异常
应该提出最适合自己需要的特定异常,
这种做法可以帮助你追踪并修复问题和错误,而且也可以更加快速地定位核心问题。
try:
# 一些代码
except FileNotFoundError:
# 处理文件不存在的情况
except ValueError:
# 处理数值转换错误的情况
2. 提供错误消息并避免没有消息的异常
为所有异常编写描述性和明确的错误消息,
这样有问题的时候才能更加明确问题定位的方向。
try:
num = int("a")
except ValueError as e:
raise ValueError(f"无效的输入数据,请输入数字:{e}")
3. 优先使用内置异常而不是自定义异常
尝试为代码中的每个错误找到合适的内置异常,
确保与 Python 生态系统的其余部分保持一致,
这样作为熟悉常见异常的 Python 开发人员也能更好地理解代码。
def divide_numbers(a, b):
try:
return a / b
except ZeroDivisionError:
raise ZeroDivisionError("除数不能为零")
4. 避免引发 AssertionError 异常
此异常专门针对该 assert 语句,不适用于其他上下文。
这种异常一般适用于调试环境,
放在单元测试里面更加合适。
# 不建议在代码中使用 assert 语句引发异常
assert condition, "条件不满足"
5. 尽快引发异常
尽早地检查类似参数类型、值大小这种临界值错误,
可以避免让后续的代码处理很多冗余的条件,
代码也更加清晰。
def calculate_square_root(number):
if number < 0:
raise ValueError("不能计算负数的平方根")
# 继续执行平方根计算
6. 在代码文档中解释引发的异常
明确列出并解释给定代码段可能引发的所有异常,
这种做法有助于其他开发人员了解他们应该预料到哪些异常,
以及他们如何适当地处理。
def open_file(file_path):
"""
打开指定路径的文件。
Args:
file_path (str): 文件路径
Raises:
FileNotFoundError: 如果文件不存在
PermissionError: 如果没有读取文件的权限
"""
# 打开文件的代码
通过遵循这些实践和建议,可以提高代码的可读性、可维护性,并使其他开发人员更容易理解和使用自己的代码。
THE END