当前位置:首页>python>Python异常处理保姆级教程:try-except容错机制、自定义异常,彻底解决程序崩溃闪退

Python异常处理保姆级教程:try-except容错机制、自定义异常,彻底解决程序崩溃闪退

  • 2026-10-10 23:11:47
Python异常处理保姆级教程:try-except容错机制、自定义异常,彻底解决程序崩溃闪退

标签:#Python零基础 #异常处理 #程序调试 #编程避坑

前言

平时运行Python代码,只要遇到报错:文件不存在、数组越界、类型错误、接口请求失败,程序就会直接闪退、终止运行。

在实际项目、爬虫、自动化脚本、数据分析场景中,程序绝对不能因为单次报错直接终止。

这就需要用到 异常处理机制,主动捕获错误、跳过故障代码、输出提示信息,让程序稳定持续运行。本篇零基础保姆教程,全覆盖日常开发99%异常场景,代码直接复制即用。


一、什么是异常?为什么要捕获异常?

异常:代码逻辑本身没问题,但运行时遇到意外情况导致程序报错、终止。

常见场景:

✅ 读取文件时,文件不存在

✅ 字符串转数字格式不合法

✅ 列表取值超出索引范围

✅ 网络请求超时、接口返回异常数据

✅ 字典读取不存在的Key

异常处理的核心作用:捕获错误、记录日志、跳过错误逻辑,保证程序不崩溃。


二、异常处理核心语法:try-except(必学)

基础结构

try:包裹可能报错的风险代码

except:捕获异常,报错后执行的备用逻辑

else:无异常时执行(可选)

finally:无论是否报错,都会执行(可选)

基础demo(零基础入门)

try:  # 风险代码:可能报错  num = int("abc")except:  # 报错后执行  print("代码出现异常,格式错误!")  print("程序继续运行,不会崩溃")

💡 效果:即使代码报错,也不会终止程序,后续代码正常执行。


三、精准捕获异常(生产环境标准写法)

新手不建议直接空except,无法区分错误类型,生产环境推荐精准捕获指定异常。

1、常见内置异常类型

ValueError:数值格式错误(字符串转数字失败)

FileNotFoundError:文件不存在

IndexError:列表索引越界

KeyError:字典Key不存在

TypeError:数据类型不匹配

Exception:万能异常,捕获所有常规异常

2、精准捕获示例

try:  text = "python"  num = int(text)except ValueError:  print("数值转换异常:非数字字符串无法转换")

3、获取异常详细信息

try:  1 / 0except Exception as e:  print("异常详情:", e)

四、else & finally 关键字实战用法

1、else:无异常才执行

适合:代码正常执行成功后的收尾提示、数据保存操作

try:  num = int("123")except Exception as e:  print("出错了:", e)else:  print("代码执行成功,数值为:", num)

2、finally:无论对错必执行

适合:关闭文件、释放资源、结束链接、程序收尾

try:  f = open("test.txt", "r", encoding="utf-8")  content = f.read()except Exception as e:  print("读取文件异常:", e)finally:  f.close()  print("文件已强制关闭")

💡 拓展:日常文件读写更推荐with语句,自动关闭,无需finally手动释放资源。


五、高频实战场景(直接复制生产可用)

场景1:文件读取容错(解决文件不存在报错)

try:  with open("test.txt", "r", encoding="utf-8") as f:    content = f.read()  print("文件读取成功")except FileNotFoundError:  print("警告:文件不存在,跳过本次读取")

场景2:字典取值容错(避免KeyError崩溃)

data = {"name": "Python教程", "age": 1}try:  print(data["skill"])except KeyError:  print("当前字典无该字段,返回默认值")

场景3:列表索引容错(遍历数据防越界)

lst = [10, 20, 30]try:  print(lst[10])except IndexError:  print("索引超出列表范围")

场景4:爬虫/循环批量任务容错(最常用)

批量爬取、批量处理数据时,单个数据报错,不影响整体循环

url_list = ["url1", "url2", "url3"]for url in url_list:  try:    # 模拟请求逻辑    print(f"正常抓取:{url}")  except Exception as e:    print(f"{url} 抓取失败,错误:{e},自动跳过")

六、主动抛出异常:raise 关键字

业务开发中,可主动判定条件、主动抛出异常,规范数据校验。

用法场景:参数校验、权限判断、数据合规检测

age = -5if age < 0:  raise ValueError("年龄不能为负数,请输入合法数值")

💡 说明:raise 会主动终止程序,配合try-except可实现自定义容错逻辑。


七、进阶:自定义异常(项目开发必备)

内置异常无法满足复杂业务时,可以自定义异常类型,精准区分业务错误。

# 自定义异常类class ParamsError(Exception):  """参数校验异常"""  pass    # 业务逻辑使用  def check_score(score):    if score < 0 or score > 100:      raise ParamsError("分数必须在0-100之间")    print("分数校验通过")  try:    check_score(120)  except ParamsError as e:    print("业务参数异常:", e)

八、新手高频踩坑总结

1、滥用万能空except

直接写 except: 会捕获所有错误,隐藏代码bug,开发阶段建议精准捕获异常,方便排错。

2、try包裹过多代码

只把可能报错的风险代码放入try内部,正常逻辑不要嵌套,方便定位问题。

3、只捕获异常不处理异常

不要空捕获不打印、不记录日志,报错后无任何提示,后期无法排查问题根源。

4、混淆finally执行逻辑

finally无论对错必执行,资源释放、链接关闭放这里,业务逻辑不要写在finally。


文末结语

异常处理是Python项目从“玩具代码”变成“工程级稳定代码”的关键技能。

熟练掌握 try-except、精准捕获、自定义异常,能彻底解决程序闪退、批量任务中断、未知报错崩溃问题,让你的代码稳定性提升一个档次。

本文所有案例适配生产场景,可直接复制复用,建议收藏,写脚本、爬虫、业务代码随时查阅!

最新文章

随机文章