Python 基础 - 第十一节


📋 本节要点

知识点 说明
try 尝试执行可能出错的代码
except 捕获异常并处理
else try 正常执行完毕时执行
finally 不论是否异常都会执行
raise 主动抛出异常
异常类型 常见的错误类型

1. 异常概述

异常是程序在执行过程中发生的错误。Python 提供了异常处理机制,可以让程序在遇到错误时不会直接崩溃,而是进行合理的处理。

# 可能出错的代码
num = int(input("请输入一个数字:"))
print("你输入的数字是:", num)

如果用户输入的不是数字,程序会报错并终止。


2. try-except 基本语法

try:
    可能出错的代码
except:
    处理错误的代码
try:
    num = int(input("请输入一个数字:"))
    print("你输入的数字是:", num)
except:
    print("输入错误,请输入一个有效的数字!")

运行示例(输入 abc):

请输入一个数字:abc
输入错误,请输入一个有效的数字!

3. 捕获指定异常类型

不同的错误会引发不同的异常类型,我们可以针对性地处理。

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

常见异常类型:
- ValueError:类型转换错误
- ZeroDivisionError:除数为零
- IndexError:索引越界
- KeyError:字典键不存在
- FileNotFoundError:文件不存在


4. except 绑定异常变量

可以使用 as 获取异常的具体信息。

try:
    num = int(input("请输入一个数字:"))
    print("你输入的数字是:", num)
except ValueError as e:
    print("输入错误!具体原因:", e)

5. try-except-else 结构

else 子句在 try 代码块正常执行完毕(没有发生异常)时才会执行。

try:
    num = int(input("请输入一个数字:"))
except ValueError:
    print("输入错误!")
else:
    print("输入成功,数字是:", num)

6. try-except-finally 结构

finally 子句不论是否发生异常,都会执行。通常用于清理工作。

try:
    f = open("test.txt", "r")
    content = f.read()
    print(content)
except FileNotFoundError:
    print("文件不存在!")
finally:
    print("无论是否出错,这里都会执行")

7. raise 主动抛出异常

可以使用 raise 关键字主动抛出异常。

def divide(a, b):
    if b == 0:
        raise ValueError("除数不能为零!")
    return a / b

try:
    result = divide(10, 0)
except ValueError as e:
    print("发生错误:", e)

运行结果:

发生错误: 除数不能为零!

8. 实战案例:登录验证

def login():
    username = input("请输入用户名:")
    password = input("请输入密码:")

    if username == "" or password == "":
        raise ValueError("用户名和密码不能为空!")
    if len(password) < 6:
        raise ValueError("密码长度不能少于6位!")

    return True

try:
    login()
    print("登录成功!")
except ValueError as e:
    print("登录失败:", e)

下一节预告:文件操作基础