三、自定义异常
自定义异常是在Python中创建新的异常类型的过程,这使得你可以定义特定于你的应用程序或库的错误情况。自定义异常让你能够更清晰地表达错误的含义,并且使得异常处理更加具有可读性和可管理性。
3.1 自定义异常的创建
其实,创建自定义异常类非常简单,通常你只需要继承自Exception类(或者Python异常层次结构中的任何其他类):
class MyCustomError(Exception):
""“基础自定义异常类”""
def __init__(self, message):
super().__init__(message)
3.2 自定义异常的使用
一旦定义了自定义异常类,你就可以在代码中使用raise关键字来抛出这个异常:
def divide(a, b):
if b == 0:
raise MyCustomError("分母不能为0")
return a / b
try:
divide(10, 0)
except MyCustomError as e:
print(f"发生了自定义错误:{e}")
3.3 其他功能
自定义异常可以包含额外的属性和方法,以便在异常发生时传递更多的错误上下文:
class InvalidInputError(Exception):
def __init__(self, input_value, message="无效的输入"):
super().__init__(message)
self.input_value = input_value
try:
raise InvalidInputError(10, "输入值不能为偶数")
except InvalidInputError as e:
print(f"错误:{e},输入的值是:{e.input_value}")
四、Assert断言
4.1 什么是断言
断言(assert)是Python中的一种简单而强大的机制,用于设置代码的检查点,确保程序在继续执行前满足某些条件。如果条件为真,则程序继续执行;如果条件为假(即断言失败),则Python抛出AssertionError异常。
基本语法
assert condition, "Error message"
condition:要检查的条件,如果该条件为False,将引发异常。
"Error message":断言失败时显示的错误信息,它是可选的。
示例代码
assert 2 + 2 == 4, "数学出错了!"
如果2 + 2不等于4,将抛出AssertionError,并且错误信息将是"数学出错了!"。
4.2 什么时候用断言
调试:在开发过程中,断言可以用来验证代码的某些部分是否按预期工作。
def add(a, b):
assert isinstance(a, (int, float)) and isinstance(b, (int, float)), "参数必须是数字"
return a + b
add(1, 'a') # 这将引发AssertionError,因为第二个参数不是数字
契约编程:断言可以作为函数契约的一部分,确保传入的参数满足特定的条件。
def divide(a, b):
assert b != 0, "分母不能为0"
return a / b
divide(10, 0) # 这将引发AssertionError,因为分母为0
自动化测试:在自动化测试中,断言用来验证测试用例的预期结果。
def factorial(n):
assert n >= 0, "输入必须是非负整数"
if n == 0:
return 1
return n * factorial(n - 1)
# 测试factorial函数
assert factorial(5) == 120, "factorial测试失败"
文档:断言可以作为文档的一部分,说明函数的预期行为和参数要求。
断言是一种快速简单的方法来设置检查点,但它不应该被用来处理正常的程序错误。对于这些情况,应该使用异常处理。