为什么需要错误处理?
在代码运行中难免会出现各种"翻车现场"🚗💥:
- 用户输入了奇怪的东西
- 文件找不到了
- 网络连接断了
- 计算过程出错了…
如果不处理这些错误,程序就会直接崩溃(╥﹏╥) 而好的错误处理能让程序优雅地应对意外~
基本错误处理 - try/except
最基本的错误处理结构长这样:
|
|
举个栗子 🌰
|
|
输出:
|
|
常见错误类型一览表 📋
错误类型 | 什么时候出现 | 举个栗子 |
---|---|---|
SyntaxError |
语法错误 | print("hello" 少括号 |
IndentationError |
缩进错误 | 该缩进没缩进 |
NameError |
访问未定义变量 | print(never_defined_var) |
TypeError |
类型操作不当 | "1" + 2 |
ValueError |
值不合法 | int("abc") |
IndexError |
索引越界 | [1,2][99] |
KeyError |
字典键不存在 | {"a":1}["b"] |
AttributeError |
访问不存在的属性 | "str".unknown_method() |
ZeroDivisionError |
除数为零 | 1/0 |
FileNotFoundError |
文件找不到 | open("ghost.txt") |
多重错误处理
可以捕获多种不同类型的错误:
|
|
完整的try-except-else-finally结构
|
|
主动抛出异常 - raise
我们也可以主动制造错误:
|
|
自定义异常类
觉得内置错误不够用?可以自己造:
|
|
实际应用小贴士 💡
-
不要过度捕获:只捕获你预期会发生的错误
1 2 3 4 5 6 7 8 9 10 11
# 不好 👎 try: do_something() except: pass # 这样会隐藏所有错误! # 好的 👍 try: do_something() except ExpectedError: handle_error()
-
日志记录很重要:使用
logging
模块记录错误 -
提供有用的错误信息:帮助用户理解问题
-
finally很强大:适合做清理工作(如关闭文件)
9. 高阶技巧:上下文管理器(with语句)
超级好用的错误预防工具!
|
|
总结 ✨
- 使用
try/except
来保护可能出错的代码 - 明确定义你期望处理的错误类型
- 不要吞掉所有错误(这会隐藏bug)
- 合理使用
else
和finally
- 必要时自定义异常类
with
语句是你的好朋友
记得:好的错误处理不是为了消灭所有错误,而是为了让程序在出错时能体面地应对!٩(◕‿◕。)۶
有问题欢迎随时问我哦~ (ノ^_^)ノ