Python嵌套try...except使用详解与异常处理技巧

Ivy
Ivy
发布时间:2026-10-15| 5人浏览过
原创

本文详解Python中try...except的嵌套使用机制。通过示例展示raise抛出异常后代码执行流程,以及外层try如何捕获内层异常。同时介绍自定义异常类的继承方式,并对比Exception万能捕获、traceback模块和sys模块三种异常查看方法,帮助开发者掌握Python异常处理的核心技巧。

引言

在Python编程中,try…except…结构常用于捕获运行时异常,而raise关键字用于主动抛出异常。然而,当遇到多层嵌套的try…except…结构时,异常是如何逐层传递并被捕获的,这往往是初学者容易混淆的地方。

前提

抛出异常

当程序执行到raise语句以抛出错误时,该语句之后的代码将不再执行,程序控制权立即转移到最近的匹配异常处理块。

def func():
    print("hello")
    raise Exception("出现了错误")
    print("world")

func()

打印的错误堆栈

如果通过except子句成功抓取了错误,程序行为类似于执行了if...else分支,即不会中断整个脚本的执行,而是继续处理后续逻辑。

def func():
    try:
        print("hello")
        raise Exception("出现了错误")
    except Exception as why:
        print(why)
        print("world")

func()

自定义异常

创建自定义异常类时,必须继承内置的异常类或第三方框架提供的异常基类。这种继承关系确保了自定义异常能够被标准的异常处理机制所识别。

class MyError(Exception):
    pass

def say_hello(str):
    if str != "hello":
        raise MyError("传入的字符串不是hello")
    print("hello")

say_hello("world")

异常对象

  • Exception是所有内置异常的基类,它能够捕获系统中发生的绝大多数异常类型。
  • 在except子句中,使用as关键字后跟随的变量即为捕获到的异常对象。该对象是异常类实例化后的结果,包含了错误的详细信息。

多重try

在嵌套的try...except...结构中,内层代码块通过raise抛出的异常,会被外层对应的try...except...块捕获并处理,从而实现异常的逐层向上冒泡。

补充:捕获异常的小方法

方法一:捕获所有异常

a=10
b=0
try:
    print (a/b)
except Exception as e:
    print(Exception,":",e)
finally:
    print ("always excute")

运行:

<class 'Exception'> : division by zero always excute

方法二:采用traceback模块查看异常

import traceback   
try:
    print ('here1:',5/2)
    print ('here2:',10/5)
    print ('here3:',10/0)
    
except Exception as e:
    traceback.print_exc()

运行:

here1: 2.5 here2: 2.0 Traceback (most recent call last): File "/Users/lilong/Desktop/online_release/try_except_use.py", line 59, in <module> print ('here3:',10/0) ZeroDivisionError: division by zero

方法三:采用sys模块回溯最后的异常

import sys   
try:
    print ('here1:',5/2)
    print ('here2:',10/5)
    print ('here3:',10/0)
    
except Exception as e:
    info=sys.exc_info()  
    print (info[0],":",info[1])

运行:

here1: 2.5 here2: 2.0 <class 'ZeroDivisionError'> : division by zero

注意:万能异常Exception

当被检测的代码块可能抛出多种类型的异常,且希望用同一种逻辑处理所有情况时,可以使用Exception。除非需要对特定异常类型进行特殊处理,否则建议使用Exception进行通用捕获。

总结

到此这篇关于python嵌套try...except如何使用的文章就介绍到这了,更多相关python嵌套try...except使用内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。