Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

PyFirst

12. 错误猎人

写了这么多代码,你一定遇到过红色的错误信息 😱。程序因为一个输入错误就"崩了"?别担心,今天你将成为一名错误猎人——学会预测错误、捕获错误、优雅地处理它!

🔬 程序报错不是你的失败,而是程序在帮你找问题!

想象你在拼一套乐高城堡。拼到一半发现少了一块红色的积木——你会说"我失败了"吗?不会!你会想:“哦,红色积木不够,去盒子里找一块补上就好。”

Python 的红色错误信息,就是那个在告诉你"少了什么"的提示。红色的字不是批评你,而是指路牌——它精确告诉你:哪个文件、第几行、什么类型的错误。能读懂错误信息,你就不再害怕 Bug,反而会感谢它们帮你发现盲点

今天的目标:从 “啊啊啊报错了!” 变成 “哦,第 5 行有个 TypeError,我知道了!” 😎


12.1 错误不可怕——认识常见错误

先来看看你可能会遇到的几种"老朋友":

📖 错误信息解读指南

红色错误信息看起来吓人,但其实有固定的格式。学会"拆解"它,你就能秒懂问题在哪:

Traceback (most recent call last):              ← "追踪回溯"——告诉你错误是怎么一层层发生的
  File "<stdin>", line 1, in <module>           ← 出问题的文件和第几行
TypeError: can only concatenate str ...         ← 错误类型: 解释

关键看两样:第几行 + 错误类型。下面我们来认识最常见的四种错误类型。

Python
14
准备加载编辑器...
🔧 正在准备编程环境...0%
等待编辑器...
等待 Python 环境...

🔍 解读 TypeErrorTypeError 的意思是"类型错误"——你把两种不能混在一起的东西放在一起了。就像把牛奶倒进汽车的油箱——类型不匹配!解决方法:要么转换类型(str(15)),要么用 f-string(自动转换)。

Python
14
准备加载编辑器...
🔧 正在准备编程环境...0%
等待编辑器...
等待 Python 环境...

🔍 解读 ValueErrorValueError 的意思是"值错误"——数据的类型对了,但值不合理。就像老师让你报年龄,你说"负五岁"——数字类型没错,但值不合理。解决方法:检查输入是否真的是有效数字。

Python
14
准备加载编辑器...
🔧 正在准备编程环境...0%
等待编辑器...
等待 Python 环境...

🔍 解读常见错误速查表

错误类型英文意思中文含义最常见原因
ZeroDivisionErrorZero Division Error“零除错误”数学上除以 0 没意义,检查除数是不是 0
IndexErrorIndex Error“索引错误”你的列表只有 2 个元素(索引0,1),却想访问第 6 个(索引5)
KeyErrorKey Error“键错误”字典里没有你查的那个名字——像去图书馆借一本不存在的书

💡 记住:每次看到红色错误,第一反应应该是看最后一行——那里写着错误类型和原因!


12.2 try/except——给程序穿上"防弹衣" 🛡️

try/except 包裹可能出错的代码,即使出错也不会崩溃:

🚗 try/except 就像汽车的安全带

你开车不一定会撞车,但你每次都系安全带——因为万一撞了,安全带救你命。try/except 也是一样:

  • try 里的代码是要开的"车"——你认为大概率没问题,但万一呢?

  • except 是"安全带"——出事了不让你飞出去(程序不崩溃)

  • except ValueError 是"特定保护"——只防正面碰撞,侧撞不行(只捕获特定类型错误)

  • except Exception 是"全包气囊"——什么都防,但什么也防不精准

写代码时,把可能出错的代码放进 try,保护代码写进 except,你的程序就能从容面对一切意外输入!

Python
14
准备加载编辑器...
🔧 正在准备编程环境...0%
等待编辑器...
等待 Python 环境...

捕获多种错误

Python
14
准备加载编辑器...
🔧 正在准备编程环境...0%
等待编辑器...
等待 Python 环境...

💡 elsefinally

  • else:只有没出错时才运行

  • finally:不管出不出错都会运行(适合清理工作)


12.3 实战:做一个永远不会崩溃的计算器 🧮

Python
14
准备加载编辑器...
🔧 正在准备编程环境...0%
等待编辑器...
等待 Python 环境...

12.4 主动抛出异常——说"不"的权利 🚫

有时候你需要主动拒绝不合理的数据:

Python
14
准备加载编辑器...
🔧 正在准备编程环境...0%
等待编辑器...
等待 Python 环境...

12.5 实战:成绩管理系统 📋

综合运用学到的所有技能——做一个健壮的成绩管理器:

Python
14
准备加载编辑器...
🔧 正在准备编程环境...0%
等待编辑器...
等待 Python 环境...

12.6 错误处理最佳实践

原则说明
🎯 具体捕获except ValueError 而不是 except Exception
📝 有意义的提示告诉用户哪里错了、怎么改
🧹 不吞异常不要 except: pass,错误被忽略了更难找
🔍 尽早失败发现了问题立刻 raise,不要带着错误数据继续跑

🎯 记住:写代码时,假设用户会输入各种奇怪的东西——空格、负数、表情符号……做好防御,你的程序才能稳如泰山

📝 错误处理实用口诀

记住这四句话,错误处理不迷路:

🌈 红色不怕,先看最下行        ← 错误类型在最后一行
🎯 具体捕获,别用大箩筐        ← except ValueError,不要 except Exception
📢 出错要说,告诉怎么办        ← 给用户友好的中文提示
🚫 别吞异常,pass 是毒药      ← 不要 except: pass

再送一个"防崩咒":

用户输入 → try 里放
出错可能 → except 挡
万事大吉 → else 唱
无论如何 → finally 亮

以后遇到报错,别慌。先看错误类型,再看第几行,然后问自己:我该悄悄修掉它,还是用 try/except 保护起来?你已经是合格的错误猎人了!🏹