page contents

列举 5 个 Python 中的异常类型以及其含义!

面试官问“列举 5 个 Python 中的异常类型以及其含义”,其实就是在考你:写代码的时候,出错到底是怎么个“错法”,你心里有没有数。咱们就当是在边写代码边聊天,说几个最常见的异常,用大白话讲清楚。

attachments-2025-11-rGiSR1xj6927aa161a2aa.png面试官问“列举 5 个 Python 中的异常类型以及其含义”,其实就是在考你:写代码的时候,出错到底是怎么个“错法”,你心里有没有数。咱们就当是在边写代码边聊天,说几个最常见的异常,用大白话讲清楚。

在 Python 里,异常本质上就是程序跑着跑着,突然遇到一个它处理不了的情况,然后大喊一声:“我不干了!”——这时候,如果你不去 try/except 把它接住,程序就直接崩掉,后续代码都不会执行。

面试题一般不会让你背特别偏的那种名字,常见的那几种搞清楚,顺带知道一下大概在什么场景触发,基本就够用了。

下面我就挑 5 个非常常见、平时写代码一定会遇到的异常:SyntaxError、TypeError、ValueError、IndexError、KeyError,顺便拉一拉它们之间的区别。

先说这个最“丢人”的:SyntaxError。

它一般发生在代码还没开始执行的时候,解释器在“读代码”的阶段就发现你写的东西不符合 Python 的语法规则,比如少了冒号、括号没对齐、缩进乱了等等。

一个特别经典的小错误:

if x > 0
    print("ok")

少了一个冒号 :,运行的时候直接报:

SyntaxError: invalid syntax

这个错误的特点就是:代码根本没开始跑,解释器直接跟你说:“兄弟你这句我看不懂,你先改改再来。”

面试的时候你可以顺便提一句:SyntaxError 一般在写代码阶段就能被编辑器标红,属于最容易发现、也最容易修的那种。

TypeError 是写 Python 时非常常见的一个异常,意思是:你对一个对象做了不适合它类型的操作。

比如你想把字符串和数字直接加在一起:

result = "age: " + 18

这就会炸:

TypeError: can only concatenate str (not "int") to str

解释器的意思是:“我只能把字符串和字符串拼起来,你给我来了个 int,不行。”

再比如你去调用一个本来是整数的变量:

x = 10
x()

这个时候会报:

TypeError: 'int' object is not callable

就是说:int 类型的对象不能像函数那样被“调用”。

所以你可以这么记:动作是对的,但对象类型不对,就容易触发 TypeError。类型不匹配,比如加法、拼接、调用之类都可能出现它。

ValueError 和 TypeError 特别像,经常被弄混。简单粗暴地区分一下:TypeError:类型就不对。ValueError:类型对了,但值不合适。

举个例子,int() 这个函数本来就是把字符串转成整数:

num = int("123")   # 这个没问题

但如果你这么写:

num = int("hello")

解释器会说:

ValueError: invalid literal for int() with base 10: 'hello'

意思是:“你给我的是字符串没错,但内容不能转成 int 啊。”

再比如有些函数参数类型是对的,但范围不对,也会报 ValueError。比如很多地方要求某个参数必须是正数,你给了个负数,也可能用 ValueError 来表达。

所以可以这么理解:我知道你给的是对类型的东西,但这个值我处理不了,那就抛 ValueError。

IndexError 是跟“下标”相关的异常,最典型的就是对列表、元组之类的进行索引时,越界了。

比如:

nums = [10, 20, 30]
print(nums[3])

列表长度是 3,有效下标是 0、1、2,你非要访问 nums[3],就会报:

IndexError: list index out of range

这个错误的中文意思就是:“索引超出范围了”。

还有切片一般不会抛这个异常,但直接用下标访问容易出这个问题。所以写代码时,如果你对下标是怎么算的不太确定,建议要么先 len() 看一眼,要么在逻辑上加判断。

有时候面试官会顺带问一下:“字符串会不会出现 IndexError?”答案是:会的,因为字符串也支持下标访问,比如:

s = "hi"
print(s[5])  # 直接 IndexError: string index out of range

总之记住一句:只要你用中括号 [] 访问下标,越界了,就容易遇到 IndexError。

最后一个非常常见的:KeyError,主要跟字典(dict)打交道。

比如:

person = {"name": "Tom", "age": 18}
print(person["gender"])

gender 这个 key 不存在,Python 就会报:

KeyError: 'gender'

意思是:“你要的这个键在字典里没有。”KeyError 和 IndexError 有点像,只不过:IndexError 是下标越界(针对列表、元组等序列)。KeyError 是键不存在(针对字典)。

这个异常在做配置读取、解析 JSON、接口返回数据的时候特别常见,用的时候一般会搭配 in 判断一下,或者用 dict.get() 给个默认值:

gender = person.get("gender", "unknown")

这样就不会抛异常,而是拿到 "unknown"。

既然面试官问异常类型,你顺带说一下怎么捕获,会显得比较完整一点。

比如你写了这么一段代码,既有可能下标错,又有可能 key 不存在:

data = [{"name": "Tom"}, {"age": 18}, None]

for item in data:
    try:
        print(item["name"])
    except TypeError:
        print("item 不是字典")
    except KeyError:
        print("字典里没有 name 这个键")

这里: item 如果是 None,你用 ["name"] 去访问,会触发 TypeError(因为 NoneType 不支持下标)。item 如果是没有 "name" 的字典,会触发 KeyError。

通过 except 分开写,你能对不同类型的异常做不同的处理,这样就比“一刀切 except Exception”更优雅一些。

你在面试里,可以像这样简短、有条理地说出来:SyntaxError:语法错误,比如少了冒号、括号不匹配,代码还没执行就报错。TypeError:类型不匹配,比如字符串和整型相加,或者把整数当函数调用。ValueError:类型是对的,但值不合法,比如 int("abc")。IndexError:序列下标越界,比如访问 nums[100]。KeyError:访问字典中不存在的键,比如 d["gender"] 但字典里没有这个 key。

如果你能再顺带提一句“这些异常都可以用 try/except 捕获,根据不同类型做不同处理”,基本上这道题就很稳了。

行,差不多就这些,你可以把上面几个名字先记下来,然后自己写几小段代码,手动制造一下这些异常,看一眼 traceback 长什么样,印象会更深。

更多相关技术内容咨询欢迎前往并持续关注好学星城论坛了解详情。

想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2022-05-rLS4AIF8628ee5f3b7e12.jpg

  • 发表于 2025-11-27 09:32
  • 阅读 ( 113 )
  • 分类:Python开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
Pack
Pack

1783 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 2228 文章
  3. Pack 1783 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章