pytyon之raise

在 Python 中,raise 语句用于显式地引发异常。通过 raise,你可以在程序中主动触发异常,以便在特定条件下中断程序的正常执行流程,并转移到异常处理逻辑。

基本语法

raise 语句的基本语法如下:

raise [ExceptionType([message])]
  • ExceptionType 是你要引发的异常类型,通常是内置的异常类(如 ValueErrorTypeError 等)或自定义的异常类。
  • message 是一个可选的字符串,用于描述异常的详细信息。

引发内置异常

def divide(a, b):
    if b == 0:
        raise ZeroDivisionError("Division by zero is not allowed")
    return a / b

try:
    result = divide(10, 0)
except ZeroDivisionError as e:
    print(f"Caught an exception: {e}")

输出:

Caught an exception: Division by zero is not allowed

引发自定义异常

你可以定义自己的异常类,并在需要时引发它。

class MyCustomError(Exception):
    pass

def check_value(value):
    if value < 0:
        raise MyCustomError("Negative value is not allowed")

try:
    check_value(-1)
except MyCustomError as e:
    print(f"Caught a custom exception: {e}")

输出:

Caught a custom exception: Negative value is not allowed

重新引发异常

在异常处理块中,你可以使用 raise 重新引发捕获的异常,以便在更高层次的代码中进一步处理。

def process_data(data):
    try:
        result = int(data)
    except ValueError as e:
        print(f"Error converting data: {e}")
        raise  # 重新引发异常

try:
    process_data("abc")
except ValueError as e:
    print(f"Caught an exception in outer block: {e}")

输出:

Error converting data: invalid literal for int() with base 10: 'abc'
Caught an exception in outer block: invalid literal for int() with base 10: 'abc'

引发异常并附带原始异常信息

在 Python 3 中,你可以使用 raise ... from ... 语法链式引发异常,并保留原始异常信息。

def process_data(data):
    try:
        result = int(data)
    except ValueError as e:
        raise RuntimeError("Failed to process data") from e

try:
    process_data("abc")
except RuntimeError as e:
    print(f"Caught an exception: {e}")
    print(f"Original exception: {e.__cause__}")

输出:

Caught an exception: Failed to process data
Original exception: invalid literal for int() with base 10: 'abc'

总结

  • raise 语句:用于显式地引发异常。
  • 内置异常:可以引发 Python 内置的异常类型,如 ValueErrorTypeError 等。
  • 自定义异常:可以定义并引发自定义的异常类型。
  • 重新引发异常:在异常处理块中可以使用 raise 重新引发捕获的异常。
  • 链式引发异常:使用 raise ... from ... 语法链式引发异常,并保留原始异常信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小鱼爱吃火锅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值