Python中try-except如何捕获异常?有哪些实用使用技巧

来源:站长查询作者:乙爱丽丝头衔:网络博主
导读:本期聚焦于小伙伴创作的《Python中try-except如何捕获异常?有哪些实用使用技巧》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《Python中try-except如何捕获异常?有哪些实用使用技巧》有用,将其分享出去将是对创作者最好的鼓励。

Python的try-except语句是处理运行时异常的核心工具,能够在程序出现错误时避免直接崩溃,让开发者可以自定义异常处理逻辑,提升程序的容错能力。无论是处理用户输入错误、文件读写异常还是网络请求失败,都可以通过这个机制实现优雅的错误处理。

Python中try-except如何捕获异常?有哪些实用使用技巧

try-except的基本语法结构

try-except的基础结构由try块和except块组成,try块中放置可能出现异常的代码,except块中放置异常发生后的处理逻辑。基本语法如下:

try:
    # 可能出现异常的代码
    result = 10 / 0
except ZeroDivisionError:
    # 捕获到除零错误后的处理逻辑
    print("发生除零错误,除数不能为0")

当try块中的代码执行出现异常时,Python会暂停try块的执行,查找匹配的except块,如果找到对应的异常类型,就执行该except块中的代码。

捕获多种类型的异常

实际开发中,一段代码可能会出现多种不同类型的异常,我们可以通过多个except块分别捕获不同的异常,也可以使用一个except块捕获多种异常。

多个except块分别捕获

这种方式可以针对不同的异常类型给出不同的处理方案,逻辑更清晰:

try:
    num = int("abc")  # 会触发ValueError
    result = 10 / num
except ValueError:
    print("输入的字符串无法转换为整数")
except ZeroDivisionError:
    print("除数不能为0")

单个except块捕获多种异常

如果多种异常的处理逻辑相同,可以把异常类型放到一个元组中,用一个except块捕获:

try:
    # 这里可能出现ValueError或者ZeroDivisionError
    num = int(input("请输入一个数字:"))
    result = 10 / num
except (ValueError, ZeroDivisionError) as e:
    # as关键字可以获取异常的具体信息
    print(f"发生错误:{e}")

搭配else和finally子句使用

try-except还可以搭配else和finally子句,实现更完整的异常处理逻辑。

else子句

else块中的代码会在try块中的代码没有发生任何异常时执行,适合放置try块正常执行后的后续逻辑:

try:
    num = int("123")
    result = 10 / num
except (ValueError, ZeroDivisionError) as e:
    print(f"发生错误:{e}")
else:
    # 没有异常时执行
    print(f"计算结果为:{result}")

finally子句

finally块中的代码无论try块是否发生异常,都会被执行,通常用来做资源清理工作,比如关闭文件、释放网络连接等:

file = None
try:
    file = open("test.txt", "r")
    content = file.read()
    print(content)
except FileNotFoundError:
    print("文件不存在")
finally:
    # 无论是否发生异常,都关闭文件
    if file:
        file.close()
        print("文件已关闭")

捕获所有异常的正确方式

有时候我们需要捕获所有可能的异常,但是不建议直接使用空的except块,因为这样会捕获包括KeyboardInterrupt、SystemExit这样的系统退出异常,导致程序无法正常退出。正确的方式是捕获Exception类,它是大部分常见异常的父类:

try:
    # 未知的可能出现异常的逻辑
    import non_exist_module
except Exception as e:
    print(f"捕获到异常:{e}")

自定义异常类型

除了使用Python内置的异常类型,我们还可以根据业务需求自定义异常,自定义异常需要继承Exception类:

# 自定义异常类
class AgeError(Exception):
    def __init__(self, age):
        self.age = age
        super().__init__(f"年龄{age}不合法,必须在0到150之间")

def check_age(age):
    if age < 0 or age > 150:
        raise AgeError(age)  # 抛出自定义异常
    print(f"年龄{age}合法")

try:
    check_age(200)
except AgeError as e:
    print(e)

实际开发中的使用建议

  • 尽量捕获具体的异常类型,不要盲目使用宽泛的异常捕获,避免隐藏真正的问题
  • except块中的处理逻辑要简洁,不要把复杂的业务逻辑放到异常处理中
  • 不要滥用异常处理,能用条件判断避免的错误就不要依赖异常捕获,比如判断除数是否为0比捕获除零错误更高效
  • finally块中不要写可能再次抛出异常的代码,避免异常覆盖的问题

Pythontry-except异常捕获异常处理修改时间:2026-07-02 06:21:33

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。