Python 错误与异常处理:让程序更健壮

目录

一、什么是错误与异常?

🔍 错误(Error):

📢 异常(Exception):

二、常见内置异常类型

示例:

三、使用 try...except 捕获异常

✅ 基本语法:

示例 1:捕获一个特定异常

示例 2:捕获多个异常

示例 3:捕获所有异常(不推荐滥用)

四、else 和 finally 的使用

✅ else 子句:

✅ finally 子句:

五、抛出异常:raise 关键字

六、实战练习:带异常处理的学生分数录入系统

七、拓展建议(进阶练习)

八、总结对比表格

九、结语


在编写程序时,难免会遇到各种“错误”或“异常”,它们会导致程序中断执行。如果不加以处理,这些问题会让用户感到困惑甚至崩溃。

Python 提供了强大的异常处理机制,让我们可以在程序出错时做出合理反应,而不是直接崩溃。

本文将带你了解:

  • 常见的错误类型
  • 如何使用 try...except 捕获异常
  • 多个异常的处理方式
  • 使用 else 和 finally 进行流程控制
  • 实战示例讲解

一、什么是错误与异常?

🔍 错误(Error):

是指程序运行过程中发生的严重问题,通常是硬件或虚拟机层面的问题,比如内存不足、栈溢出等。这类问题一般我们不处理。

📢 异常(Exception):

是程序运行期间检测到的“非致命性错误”。例如除以零、访问不存在的变量、打开不存在的文件等。这些情况可以通过代码进行捕获和处理。


二、常见内置异常类型

异常类型描述
SyntaxError语法错误
NameError变量未定义
TypeError类型不匹配
ValueError值不合适
IndexError索引超出范围
KeyError字典键不存在
ZeroDivisionError除以零错误
FileNotFoundError文件找不到

示例:

print(undefined_variable)  
# NameError: name 'undefined_variable' is not defined

int("abc")  
# ValueError: invalid literal for int() with base 10: 'abc'

1 / 0  
# ZeroDivisionError: division by zero

三、使用 try...except 捕获异常

✅ 基本语法:

try:
    # 可能出错的代码
except 异常类型:
    # 出错后的处理逻辑

示例 1:捕获一个特定异常

try:
    result = 10 / 0
except ZeroDivisionError:
    print("不能除以零!")

输出:

不能除以零!

示例 2:捕获多个异常

try:
    num = int(input("请输入一个数字:"))
    result = 100 / num
    print("结果是:", result)
except ValueError:
    print("请输入一个有效的整数!")
except ZeroDivisionError:
    print("不能除以零!")

示例 3:捕获所有异常(不推荐滥用)

try:
    x = 1 / 0
except:
    print("发生了一个未知错误!")

⚠️ 注意:尽量避免这样写,建议明确指定要捕获的异常类型,以便定位问题。


四、else 和 finally 的使用

✅ else 子句:

当没有发生异常时执行。

try:
    num = int(input("请输入一个数字:"))
    result = 100 / num
except ValueError:
    print("请输入一个整数!")
except ZeroDivisionError:
    print("不能除以零!")
else:
    print("计算成功,结果是:", result)

✅ finally 子句:

无论是否发生异常,都会执行。常用于资源清理操作(如关闭文件、网络连接等)。

try:
    file = open("example.txt", "r")
    content = file.read()
    print(content)
except FileNotFoundError:
    print("文件未找到!")
finally:
    print("程序结束,正在清理资源...")

五、抛出异常:raise 关键字

我们可以主动抛出异常,来提醒调用者注意某些问题。

def check_age(age):
    if age < 0:
        raise ValueError("年龄不能为负数!")
    print("年龄合法:", age)

try:
    check_age(-5)
except ValueError as e:
    print("捕获异常:", e)

输出:

捕获异常:年龄不能为负数!

六、实战练习:带异常处理的学生分数录入系统

下面是一个完整的示例,演示如何在学生信息录入中加入异常处理,防止程序崩溃。

def input_score():
    while True:
        try:
            score = float(input("请输入学生成绩(0~100):"))
            if 0 <= score <= 100:
                return score
            else:
                print("输入超出范围,请输入 0 到 100 之间的数字。")
        except ValueError:
            print("输入无效,请输入数字!")

def classify_grade(score):
    if score >= 90:
        return "A"
    elif score >= 80:
        return "B"
    elif score >= 70:
        return "C"
    elif score >= 60:
        return "D"
    else:
        return "E"

# 主程序
print("欢迎使用学生评分系统")
student_name = input("请输入学生姓名:")
student_score = input_score()
grade = classify_grade(student_score)

print(f"\n学生 {student_name} 的成绩等级为:{grade}")

运行效果示例:

欢迎使用学生评分系统
请输入学生姓名:张三
请输入学生成绩(0~100):abc
输入无效,请输入数字!
请输入学生成绩(0~100):105
输入超出范围,请输入 0 到 100 之间的数字。
请输入学生成绩(0~100):85

学生 张三 的成绩等级为:B

七、拓展建议(进阶练习)

如果你已经完成了上面的小项目,还可以尝试以下进阶任务来挑战自己:

  1. 自定义异常类:创建自己的异常类型,如 InvalidScoreError
  2. 日志记录:将异常信息记录到文件中,方便后续分析;
  3. 图形界面版本:使用 tkinter 制作 GUI 版的异常处理程序;
  4. 单元测试:为你的函数编写测试用例,确保其稳定性。

八、总结对比表格

关键词作用
try包含可能引发异常的代码
except捕获并处理异常
else没有异常时执行
finally不论是否异常都执行
raise手动抛出异常

九、结语

学会了错误与异常处理之后,你就可以写出更加健壮、稳定的程序了。这不仅能提高用户体验,还能帮助你在开发中快速定位问题根源。

📌 建议:

  • 多动手练习,尝试自己设计一些带有异常处理的小程序;
  • 遇到异常不要慌张,学会阅读报错信息;
  • 在关键位置添加异常处理逻辑,提升程序鲁棒性。

如果你喜欢这篇博文,别忘了点赞、收藏并分享给更多想学 Python 的朋友~有任何问题也欢迎留言讨论 😊

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值