共计 1470 个字符,预计需要花费 4 分钟才能阅读完成。
在编写 Python 程序的过程中, 异常处理 是一个不可或缺的部分。它能帮助我们优雅地应对运行时可能出现的问题,比如文件找不到、除以零、类型错误等,防止程序崩溃,并提供友好的提示。
目录
- 什么是异常(Exception)
- 常见异常类型
- 使用
try...except捕获异常 else和finally的用法- 自定义异常类
- 小结与练习
一、什么是异常?
异常是指程序运行过程中发生的错误,它会导致程序中断执行。Python 提供了内建的异常处理机制,可以让我们“捕捉”这些错误,并做出相应处理。
示例:一个除零异常
a = 10
b = 0
print(a / b) # ZeroDivisionError: division by zero
程序在运行到 a / b 时抛出了一个异常,并终止执行。
二、常见异常类型
以下是一些常见的 Python 异常类型:
| 异常类型 | 含义说明 |
|---|---|
ZeroDivisionError |
除以零错误 |
TypeError |
类型不匹配 |
ValueError |
错误的值 |
IndexError |
下标越界 |
KeyError |
字典中找不到指定键 |
FileNotFoundError |
文件不存在 |
ImportError |
模块导入失败 |
三、使用 try...except 捕获异常
我们可以使用 try...except 结构来捕获并处理这些异常。
基本语法:
try:
# 可能出错的代码
except 异常类型:
# 出错后的处理逻辑
示例:
try:
num = int(input("请输入一个整数:"))
result = 10 / num
print("结果是:", result)
except ZeroDivisionError:
print("不能除以 0!")
except ValueError:
print("请输入有效的整数!")
四、else 和 finally 的用法
else:如果try中的代码没有抛出异常,则执行else语句块。finally:无论是否抛出异常,都会执行finally,通常用于清理资源(如关闭文件、关闭数据库连接等)。
示例:
try:
file = open("data.txt", "r")
content = file.read()
except FileNotFoundError:
print("文件不存在。")
else:
print("文件内容:", content)
finally:
if 'file' in locals():
file.close()
print("文件已关闭。")
五、自定义异常类
在某些场景下,我们可以自定义异常类来表达更具体的问题。
示例:
class PasswordTooShortError(Exception):
"""密码太短异常"""
pass
def set_password(pwd):
if len(pwd) < 6:
raise PasswordTooShortError("密码长度不能少于 6 位")
print("密码设置成功")
try:
set_password("123")
except PasswordTooShortError as e:
print("发生异常:", e)
六、小结与练习
✅ 今日小结
- 异常是程序运行中的错误。
- 通过
try...except可以捕捉并处理异常,防止程序崩溃。 else用于处理没有异常的情况,finally用于清理工作。- 可以创建自定义异常类以增强程序可读性和可维护性。
💡 今日练习
- 编写一个函数,接受两个数字作为参数,计算除法结果,要求使用异常处理确保不会因除以零而出错。
- 写一个程序,从用户输入文件名并尝试读取文件内容,使用异常处理处理文件不存在的情况。
- 实现一个自定义异常,当用户输入的年龄小于 0 或大于 150 时,抛出
InvalidAgeError。
正文完