在 Python 中,raise 和 assert 是用于处理和控制错误的两个关键字。它们在编写健壮且易于调试的代码时非常有用。
raise
raise 关键字用于显式地引发异常。你可以在代码中使用 raise 来引发一个指定的异常,并附带一个描述性的信息。
示例
- 基本使用:
|
1 2 3 4 5 6 7 8 9 |
def divide(x, y): if y == 0: raise ZeroDivisionError("除数不能为零") return x / y try: result = divide(10, 0) except ZeroDivisionError as e: print(f"捕获到异常: {e}") |
输出:
|
1 |
捕获到异常: 除数不能为零 |
- 自定义异常:
你还可以定义自己的异常类型。
|
1 2 3 4 5 6 7 8 9 10 11 |
class CustomError(Exception): pass def do_something(value): if value < 0: raise CustomError("值不能为负数") try: do_something(-1) except CustomError as e: print(f"捕获到自定义异常: {e}") |
输出:
|
1 |
捕获到自定义异常: 值不能为负数 |
assert
assert 关键字用于进行调试性检查。它后面跟一个表达式,如果表达式的值为假(即 False),则触发一个 AssertionError 异常,并可以选择性地包含一条错误消息。
示例
- 基本使用:
|
1 2 3 4 5 6 7 8 |
def divide(x, y): assert y != 0, "除数不能为零" return x / y try: result = divide(10, 0) except AssertionError as e: print(f"捕获到断言错误: {e}") |
输出:
|
1 |
捕获到断言错误: 除数不能为零 |
- 调试代码:
断言常用于在开发和测试阶段检查代码的正确性。
|
1 2 3 4 5 6 7 8 |
def test_function(x): assert x > 0, "x 应该是正数" return x * 2 try: result = test_function(-1) except AssertionError as e: print(f"捕获到断言错误: {e}") |
输出:
|
1 |
捕获到断言错误: x 应该是正数 |
区别和用法
raise:- 用于显式地引发异常,以便在运行时处理错误条件。
- 常用于代码中发生异常情况时,如非法操作或逻辑错误。
assert:- 用于在开发和调试阶段进行内部检查。
- 在生产环境中通常会被禁用(通过运行 Python 解释器时使用
-O选项),因此不应依赖assert进行关键的运行时检查。
示例总结
使用 raise 引发异常
|
1 2 3 4 5 6 7 8 9 |
def check_age(age): if age < 0: raise ValueError("年龄不能为负数") return age try: age = check_age(-5) except ValueError as e: print(f"捕获到异常: {e}") |
输出:
|
1 |
捕获到异常: 年龄不能为负数 |
使用 assert 进行断言
|
1 2 3 4 5 6 7 8 |
def check_age(age): assert age >= 0, "年龄不能为负数" return age try: age = check_age(-5) except AssertionError as e: print(f"捕获到断言错误: {e}") |
输出:
|
1 |
捕获到断言错误: 年龄不能为负数 |
通过理解和合理使用 raise 和 assert,可以编写出更健壮和更易于维护的代码。