今天我们将探讨编写健壮且抗错误的Python程序的一个关键技能——使用try
、except
等进行异常处理。
我们都会犯错——代码也是如此。Python提供了工具,让我们能够优雅地捕获和处理错误,而不是让程序崩溃。
📦 你将学到什么
- 什么是异常以及它们是如何发生的
- 如何使用
try
和except
块 - 可选工具:
else
和finally
- 如何处理多个异常
- 实际案例
⚠️ 什么是异常?
异常是运行时错误,它会中断程序的正常流程。常见的例子包括:
- 除以零
- 访问无效索引
- 不正确地将字符串转换为数字
- 文件未找到
未处理的情况:
num = int(input("请输入一个数字: "))
print(10 / num)
如果用户输入0或一个字符串,程序将崩溃。让我们来修复这个问题。
✅ 基本的 try-except
块
try:
num = int(input("请输入一个数字: "))
result = 10 / num
print(result)
except ZeroDivisionError:
print("你不能除以零!")
except ValueError:
print("请输入一个有效的数字。")
🔍 输出示例:
- 输入:
0
→ “你不能除以零!” - 输入:
"abc"
→ “请输入一个有效的数字。”
🧪 捕获所有异常(不推荐经常使用)
try: risky_code() except Exception as e: print("发生了错误:", e)
对于日志记录或调试非常有用,但尽量在可能的情况下处理特定的异常。
🧠 使用 else
和 finally
else
在没有发生异常时运行finally
无论如何都会运行 (非常适合清理工作)
try:
num = int(input(“请输入数字: “))
result = 10 / num
except ZeroDivisionError:
print(“无法除以零。“)
else:
print(“除法成功:“, result)
finally:
print(“这段代码总会执行。“)
🔁 处理多个错误
try:
numbers = [1, 2, 3]
print(numbers[5]) # IndexError
except (IndexError, ValueError) as e:
print("发生错误:", e)
🚀 现实世界示例:安全的用户输入
def get_age():
try:
age = int(input("请输入您的年龄: "))
print("您是", age, "岁。")
except ValueError:
print("无效的年龄。请输入一个数字。")
get_age()
🧰 自定义异常(高级)
您可以为特定的业务逻辑定义自己的异常:
class AgeTooLowError(Exception):
pass
def check_age(age):
if age < 18:
raise AgeTooLowError("您必须至少18岁。")
🧼 最佳实践
- ✅ 捕获特定异常(
ValueError
,ZeroDivisionError
) - ✅ 使用
finally
进行清理(例如,关闭文件) - ✅ 除非绝对必要,避免使用裸
except:
- ✅ 记录或显示有意义的错误信息
- 🚫 不要将异常用于正常控制流
🧠 回顾
今天你学到了:
- 什么是异常
- 如何使用
try
,except
,else
和finally
- 如何处理多个和自定义异常
- 使你的程序具备抗崩溃能力的实际示例