page contents

玩转 Python 异常处理:给代码加上 “错误急救箱”!

写代码时,最怕遇到程序突然报错崩溃。这时候,异常处理就像给代码配备了一个 “错误急救箱”,能帮我们优雅地处理各种意外情况。无论是文件读取失败,还是用户输入错误,异常处理都能让程序继续运行。今天,咱们就来聊聊这个超实用的技能!

attachments-2025-05-FcD4YiMA6822a346ccaa2.jpg写代码时,最怕遇到程序突然报错崩溃。这时候,异常处理就像给代码配备了一个 “错误急救箱”,能帮我们优雅地处理各种意外情况。无论是文件读取失败,还是用户输入错误,异常处理都能让程序继续运行。今天,咱们就来聊聊这个超实用的技能!

一、什么是异常?先看个 “翻车现场”

在 Python 里, 异常就是程序运行时遇到的错误。比如,你想让程序用一个数除以 0,或者读取一个不存在的文件,Python 就会 “喊救命”,抛出异常。看个例子:

num = 10 / 0  # 尝试除以0print(num)

运行这段代码,会看到这样的报错:

ZeroDivisionError: division by zero

ZeroDivisionError 就是一种异常类型,告诉我们 “不能除以 0”。如果不处理这些异常,程序就会中断,后面的代码都没法执行了。 二、try-except:捕捉异常的 “黄金搭档” try-except 是 Python 处理异常的核心语法,就像给代码包上一层 “防护罩”。try 块里放可能出错的代码,except 块负责 “接住” 异常并处理。

try:    num = 10 / 0  # 可能抛出异常的代码    print(num)except ZeroDivisionError:    print("不能除以0哦!")

运行结果:

不能除以0哦!

代码解释: try 块里的 10 / 0 尝试执行除法运算,如果出错就会跳到 except 块。 except ZeroDivisionError 表示专门捕捉 ZeroDivisionError 类型的异常,执行对应的处理代码。 小贴士:如果不确定会遇到哪种异常,可以用 except 捕获所有异常,但这样可能隐藏真正的错误原因,建议优先指定具体的异常类型。 三、多个 except 块:精准处理不同异常 一个程序可能遇到多种异常,这时可以用多个 except 块分别处理。比如,读取文件时可能遇到文件不存在的情况,也可能遇到权限不足的问题:

try:    with open('nonexistent_file.txt''r'as file:  # 尝试打开不存在的文件        content = file.read()except FileNotFoundError:    print("文件找不到!")except PermissionError:    print("没有读取权限!")

代码解释: 1.如果文件不存在,触发 FileNotFoundError,执行第一个 except 块。 2.如果权限不足,触发 PermissionError,执行第二个 except 块。 四、finally:无论如何都要执行的代码 finally 语句块很特别,不管 try 块里的代码有没有出错,它都会执行。就像游戏结束后,不管输赢都要结算奖励。

try:    num = 10 / 2    print(num)except ZeroDivisionError:    print("不能除以0!")finally:    print("程序执行完毕!")

运行结果:

5程序执行完毕!

finally 常用于释放资源,比如关闭文件、断开数据库连接,确保资源不会因为异常而泄漏。 五、抛出异常:主动 “喊救命” 除了被动处理异常,我们还能主动抛出异常。比如,写一个函数检查用户输入的年龄,如果年龄是负数,就抛出异常:

def check_age(age):    if age < 0:        raise ValueError("年龄不能是负数!")  # 主动抛出异常    return f"你的年龄是 {age} 岁"try:    result = check_age(-5)    print(result)except ValueError as e:    print(e)

运行结果:

年龄不能是负数!

raise 关键字用于抛出异常,这样可以让程序在不满足条件时,及时 “喊救命”,提醒调用者处理问题。 六、自定义异常:打造专属 “警报器” Python 允许我们定义自己的异常类型,就像给程序定制一个专属的 “警报器”。比如,我们想处理游戏中的 “金币不足” 异常:

class InsufficientCoinsError(Exception):    passdef buy_item(coins, item_cost):    if coins < item_cost:        raise InsufficientCoinsError("金币不够,买不了!")    return "购买成功!"try:    result = buy_item(1020)    print(result)except InsufficientCoinsError as e:    print(e)

这里定义了 InsufficientCoinsError 类,继承自 Exception,然后在函数里按需抛出,让代码的错误处理更贴合业务逻辑。

七、常见错误提醒

1.捕获所有异常的风险:直接用 except 不指定类型,可能隐藏严重错误,比如语法错误也会被当成普通异常 “吃掉”。

2.异常嵌套:多层 try-except 容易让代码变复杂,尽量精简逻辑,避免过度使用。

3.异常信息丢失:自定义异常时,记得传递有用的错误信息,方便调试。

八、练习题

1.写一个函数,接收用户输入的两个数并相除,用异常处理捕获 ZeroDivisionError 和 ValueError(输入非数字的情况)。

2.自定义一个 OutOfStockError 异常,模拟商品库存不足时抛出异常并处理。

更多相关技术内容咨询欢迎前往并持续关注好学星城论坛了解详情。

想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2022-05-rLS4AIF8628ee5f3b7e12.jpg

  • 发表于 2025-05-13 09:41
  • 阅读 ( 72 )
  • 分类:Python开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
小柒
小柒

2136 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 2136 文章
  3. Pack 1303 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章