第45集:异常处理基础:try-except

学习目标

  • 理解异常的概念
  • 掌握try-except语句的基本用法
  • 学会捕获和处理异常
  • 理解异常的类型
  • 掌握异常处理的最佳实践

一、什么是异常?

异常是程序运行时发生的错误,会导致程序中断。

常见异常类型

异常类型 说明
ZeroDivisionError 除零错误
ValueError 值错误
TypeError 类型错误
IndexError 索引越界
KeyError 键不存在
FileNotFoundError 文件不存在

示例1:不使用异常处理

# ❌ 不处理异常,程序会崩溃
print(10 / 0)  # ZeroDivisionError

示例2:使用异常处理

# ✅ 使用try-except捕获异常
try:
    print(10 / 0)
except ZeroDivisionError:
    print("除数不能为零")

二、try-except基本语法

语法结构

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

示例3:捕获除零错误

def divide(a, b):
    """除法函数"""
    try:
        result = a / b
        return result
    except ZeroDivisionError:
        return "除数不能为零"

print(divide(10, 2))   # 输出:5.0
print(divide(10, 0))   # 输出:除数不能为零

示例4:捕获多个异常

def safe_convert(value):
    """安全转换"""
    try:
        return int(value)
    except ValueError:
        return "无法转换为整数"
    except TypeError:
        return "类型错误"

print(safe_convert("123"))    # 输出:123
print(safe_convert("abc"))    # 输出:无法转换为整数
print(safe_convert([1, 2]))   # 输出:类型错误

示例5:捕获所有异常

try:
    # 可能出错的代码
    result = 10 / 0
except Exception as e:
    # 捕获所有异常
    print(f"发生异常:{e}")

三、获取异常信息

示例6:获取异常详情

try:
    print(10 / 0)
except ZeroDivisionError as e:
    print(f"异常类型:{type(e)}")
    print(f"异常信息:{e}")
    print(f"异常描述:{e.__str__()}")

示例7:使用traceback获取详细信息

import traceback

try:
    print(10 / 0)
except Exception as e:
    print("异常信息:", e)
    print("\n详细堆栈信息:")
    traceback.print_exc()

四、else和finally

示例8:使用else

try:
    result = 10 / 2
except ZeroDivisionError:
    print("除数不能为零")
else:
    # 没有异常时执行
    print(f"计算成功,结果:{result}")

示例9:使用finally

try:
    f = open("file.txt", "r")
    content = f.read()
except FileNotFoundError:
    print("文件不存在")
finally:
    # 无论是否异常都会执行
    print("清理资源...")
    # f.close()

五、实际应用案例

案例:安全输入函数

def get_int_input(prompt):
    """安全获取整数输入"""
    while True:
        try:
            value = int(input(prompt))
            return value
        except ValueError:
            print("请输入有效的整数!")

age = get_int_input("请输入年龄:")
print(f"年龄:{age}")

六、课后练习

练习1

编写一个除法函数,处理除零错误。

练习2

编写一个列表访问函数,处理索引越界错误。

练习3

编写一个字典访问函数,处理键不存在错误。

练习4

使用else和finally改进异常处理代码。

练习5

实现一个安全的用户输入函数,处理各种输入错误。

« 上一篇 包的概念与使用 下一篇 » 异常类型与捕获