python里的try···except···、抛出异常

本文详细讲解了Python中try-except块的使用技巧,包括多异常捕获、else子句、finally块,以及如何主动抛出和处理自定义异常。通过实例演示,帮助开发者理解和应对编程过程中的错误管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Python中执行一段可能会报错的代码时,可以使用try:

try:可能出现异常的代码 except:如果有异常执行的代码
如果是多个except,异常类型的顺序需要注意,最大的Exception要放到最后

 try:
    有可能会产生多种异常的代码
 except 异常类型1:
    print('........')
 except 异常类型2:
    print('........')
    ....
 except 异常类型n:
    print('........')
 except Exception as err:
    print(err.__class__.__name__) # 错误类型
    print(err) # 错误明细

try还可以配合else来使用,注意:如果使用else则在try代码中不能出现return

try:
    有可能有异常的代码
except 类型1pass
    ...
else:
    如果try中没有发生异常则进入的代码

try搭配finally使用:
finally:无论是否存在异常都会被执行的代码

try:
    有可能有异常的代码
except 类型1pass
    ...
finally:
    无论是否存在异常都会被执行的代码

主动抛出异常:raise可以自定义异常抛出的内容

def func():
    if ...:
        raise Exception('抛出异常打印的内容')
    else:
        pass
Python 中,可以通过 `raise` 语句在 `try-except` 块中捕获异常后重新抛出异常。具体做法是,在 `except` 块中使用 `raise` 而不带任何参数,这会将当前捕获的异常重新抛出,传递给上层调用栈处理[^1]。 以下是一个示例代码: ```python def divide(a, b): try: return a / b except ZeroDivisionError: print("捕获到除以零的错误,重新抛出异常") raise # 重新抛出捕获的异常 def main(): try: result = divide(10, 0) except Exception as e: print(f"捕获到异常: {e}") main() ``` 在上述代码中,`divide` 函数通过 `try-except` 捕获了 `ZeroDivisionError` 异常,并在处理后使用 `raise` 重新抛出异常。调用 `divide` 的 `main` 函数再次捕获该异常并进行处理。 如果需要在重新抛出异常时添加额外信息,可以使用 `raise ... from ...` 语法链式抛出异常,例如: ```python def divide(a, b): try: return a / b except ZeroDivisionError as e: print("捕获到除以零的错误,抛出带有额外信息的新异常") raise ValueError("除数不能为零") from e def main(): try: result = divide(10, 0) except Exception as e: print(f"捕获到异常: {e}") main() ``` 在这种情况下,异常信息会包含原始异常和新抛出异常之间的关联,有助于调试和追踪错误原因。 ### 异常处理的注意事项 1. **避免无意义的重新抛出**:在某些情况下,直接重新抛出异常可能并不合适,尤其是当当前函数能够处理异常时,应优先进行本地处理。 2. **保留原始异常上下文**:使用 `raise ... from ...` 可以保留原始异常的上下文信息,有助于调试。 3. **异常类型选择**:根据业务逻辑选择合适的异常类型抛出,而不是盲目抛出通用异常。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值