苦练Python第18天:Python异常处理锦囊

苦练Python第18天:Python异常处理锦囊

原文链接:dev.to/therahul_gu...

作者:Rahul Gupta

译者:倔强青铜三

前言

大家好,我是倔强青铜三 。是一名热情的软件工程师,我热衷于分享和传播IT技术,致力于通过我的知识和技能推动技术交流与创新,欢迎关注我,微信公众号:倔强青铜三。欢迎点赞、收藏、关注,一键三连!!!

欢迎来到 100 天 Python 挑战第 18 天

今天,我们将攻克 异常处理:让程序在遭遇错误时不再崩溃,而是优雅地恢复并给出提示。


📦 今日收获清单

  • 异常是什么,如何产生
  • tryexceptelsefinally 的用法
  • 多异常捕获与自定义异常
  • 实战示例与最佳实践

⚠️ 异常是什么?

异常(Exception)运行时错误 ,会打断程序正常流程。

常见场景:

  • 除零
  • 访问不存在的索引
  • 类型转换失败
  • 文件不存在

无保护代码:

python 复制代码
num = int(input("Enter a number: "))
print(10 / num)

用户输入 0 或字母,程序直接崩溃。

下面加上"安全网"。


✅ 基础 try-except

python 复制代码
try:
    num = int(input("Enter a number: "))
    result = 10 / num
    print(result)
except ZeroDivisionError:
    print("You can't divide by zero!")
except ValueError:
    print("Please enter a valid number.")

运行示例:

  • 输入 0 → "You can't divide by zero!"
  • 输入 abc → "Please enter a valid number."

🎯 一网打尽?(谨慎使用)

python 复制代码
try:
    risky_code()
except Exception as e:
    print("Something went wrong:", e)

适合记录日志,但日常开发请尽量捕获具体异常。


🧠 else & finally 双保险

  • else无异常时 执行
  • finally无论如何 都执行,常用于清理资源
python 复制代码
try:
    num = int(input("Enter number: "))
    result = 10 / num
except ZeroDivisionError:
    print("Can't divide by zero.")
else:
    print("Division successful:", result)
finally:
    print("This always runs.")

🔁 一次捕获多种异常

python 复制代码
try:
    numbers = [1, 2, 3]
    print(numbers[5])  # IndexError
except (IndexError, ValueError) as e:
    print("An error occurred:", e)

🚀 实战:安全读取用户年龄

python 复制代码
def get_age():
    try:
        age = int(input("Enter your age: "))
        print("You are", age, "years old.")
    except ValueError:
        print("Invalid age. Please enter a number.")

get_age()

🧰 进阶:自定义异常

定义业务专属错误类型:

python 复制代码
class AgeTooLowError(Exception):
    pass

def check_age(age):
    if age < 18:
        raise AgeTooLowError("You must be at least 18.")

🧼 异常处理最佳实践

  • ✅ 捕获具体异常,避免裸 except
  • ✅ 使用 finally 释放资源(如关闭文件)
  • ✅ 提供清晰、友好的错误提示
  • 🚫 别把异常当流程控制工具

🧠 一日精华

  • 异常是程序运行时的"意外",需要被捕获
  • try-except-else-finally 四剑客各有分工
  • 多异常、自定义异常让错误处理更精准
  • 写出健壮、用户友好的代码,从异常处理开始

最后感谢阅读!欢迎关注我,微信公众号倔强青铜三。欢迎点赞收藏关注,一键三连!!!

相关推荐
机器之心24 分钟前
FlashAttention-4震撼来袭,原生支持Blackwell GPU,英伟达的护城河更深了?
人工智能·openai
IT_陈寒25 分钟前
Python 3.12 新特性实战:5个让你的代码效率提升50%的技巧!🔥
前端·人工智能·后端
郭庆汝39 分钟前
GraphRAG——v0.3.5版本
后端·python·flask
点云SLAM39 分钟前
PyTorch中 nn.Linear详解和实战示例
人工智能·pytorch·python·深度学习·cnn·transformer·mlp
Amazon数据采集43 分钟前
[5 万字]手把手教你写一个能打的Amazon评论爬虫,搞定反爬和登录限制!(2025版)
爬虫·python
agnver1 小时前
打卡day49
python
耳东哇1 小时前
在使用spring ai进行llm处理的rag的时候,选择milvus还是neo4j呢?
人工智能·neo4j·milvus
focksorCr1 小时前
pytest 并发执行用例(基于受限的测试资源)
python·pytest
过往入尘土1 小时前
深入浅出 PyTorch:从下载安装到核心知识点全解析
人工智能·pytorch·python
在未来等你1 小时前
RabbitMQ面试精讲 Day 29:版本升级与平滑迁移
中间件·面试·消息队列·rabbitmq