当前位置: 首页 > news >正文

《超简单:用 Python 让 Excel 飞起来》读书笔记:2.2.3 数据类型查询:type排错法


🔥个人主页:杨利杰YJlio
❄️个人专栏:《Sysinternals实战教程》 《Windows PowerShell 实战》 《WINDOWS教程》 《IOS教程》
《微信助手》 《锤子助手》 《Python》 《Kali Linux》
《那些年未解决的Windows疑难杂症》
🌟让复杂的事情更简单,让重复的工作自动化


@[TOC](《超简单:用 Python 让 Excel 飞起来》读书笔记:2.2.3 数据类型查询:type() 排错法)

1. 2.2.3 数据类型查询:type() 排错法

读书笔记定位:本文是我阅读《超简单:用 Python 让 Excel 飞起来》时整理的学习笔记,重点不是照搬原书,而是把type()这个基础函数放到Python + Excel 办公自动化排错场景里重新理解。

学完intfloatstr这些基础类型后,很快就会遇到一个现实问题:数据表面看起来像数字、日期、文本,但 Python 真正拿到的类型,可能和我们以为的完全不是一回事。

尤其是做 Excel 自动化时,这个问题会被放大。比如 Excel 单元格里显示的是1200,但 Python 读出来可能是字符串"1200";单元格看起来是空的,读出来可能是None;原本想做数字相加,最后却变成了字符串拼接。

所以这一节真正要掌握的,不只是 type() 的语法,而是用它建立一种排错习惯:先确认数据类型,再决定下一步处理方式。

这张图展示的是type()在 Python + Excel 自动化排错中的整体定位:它不是复杂工具,而是一个能快速看穿变量真实类型的小函数。

从图中可以看出,123123.0"123"None虽然表面都像“数据”,但在 Python 眼里分别对应intfloatstrNoneType。**很多 Excel 自动化脚本出错,不是因为代码语法错了,而是因为数据类型和预期不一致。**


2. type() 是什么?

type()是 Python 的内置函数,用来查看一个对象的真实类型。它的使用方式非常简单:把变量放进type()里,再打印出来。

x=10print(type(x))

输出结果通常是这样的:

<class 'int'>

我更愿意把它理解成一句话:别猜,直接让 Python 告诉我这个变量到底是什么。

这张图展示的是type()的基础作用:通过一个函数,把常见数据类型直接识别出来。

从图中能看出,type()的价值不在于“看起来高级”,而在于它能把模糊感觉变成明确判断。123是整数,123.0是小数,"Hello"是字符串,None是空值。对新手来说,这一步很基础;对写脚本排错来说,这一步很关键。

注意:type() 适合用来观察和调试,但不要把它理解成万能的数据清洗方案。它只能告诉我们当前对象是什么类型,不能自动帮我们判断这个值是否合理,更不能自动完成类型转换。


3. 最常见的类型查询示例

先看几个最基础的例子。不要觉得简单,后面处理 Excel 表格、批量汇总、自动填报时,这些基础判断会反复出现。

3.1 查询整数 int

a=100print(a,type(a))

输出结果:

100 <class 'int'>

int表示整数,常见于数量、行号、计数、年份等场景。比如统计设备数量、工单数量、库存数量时,通常就是整数类型。

3.2 查询小数 float

b=19.9print(b,type(b))

输出结果:

19.9 <class 'float'>

float表示浮点数,也就是带小数点的数字。金额、比例、平均值、耗时统计,经常会用到这种类型。

3.3 查询字符串 str

c="Excel自动化"print(c,type(c))

输出结果:

Excel自动化 <class 'str'>

str表示字符串。文件路径、表名、列名、员工姓名、部门名称,大多数都是字符串。

3.4 查询空值 NoneType

value=Noneprint(value,type(value))

输出结果:

None <class 'NoneType'>

看到 NoneType,就要立刻警惕:这个值可能来自空单元格,不能直接做加法、拼接、格式化计算。

这几个例子看起来简单,但它们就是后面排查 Excel 数据异常的基础。很多时候,我们不是不会写循环,也不是不会读 Excel,而是没有先确认每个字段到底是什么类型。


4. 为什么 type() 在 Excel 自动化里特别重要?

做 Python 基础练习时,变量通常是我们自己写死的,所以类型比较可控。但一旦进入 Excel 自动化,数据来源就复杂了:表格是别人填的,格式可能被复制粘贴污染,数字可能被当成文本保存,日期可能被 Excel 转成序列号,空白单元格也可能被读取成不同的空值形式。

这时候最危险的不是代码直接报错,而是代码不报错但结果错了。因为报错至少会提醒你停下来排查,而错误结果如果悄悄写回 Excel,后面可能影响整张报表。

4.1 看起来像数字,其实是字符串

比如下面这个例子:

money1="1200"money2="300"print(money1+money2)print(type(money1),type(money2))

输出结果:

1200300 <class 'str'> <class 'str'>

这不是数学相加,而是字符串拼接。"1200" + "300"的结果不是1500,而是"1200300"

这张图展示的就是 Excel 自动化里最常见的类型误判问题:数据看起来像数字,不代表 Python 真的把它当数字处理。

从图中可以看到,同样是来自 Excel 的数据,"1200"是字符串,1200是整数,10.0是浮点数,空白单元格可能是None这说明 Excel 显示效果和 Python 数据类型之间不能直接画等号,必须通过 type() 做一次确认。

正确处理时,要先确认类型,再根据业务含义决定是否转换:

money1="1200"money2="300"print(money1,type(money1))print(money2,type(money2))money1=int(money1)money2=int(money2)print(money1+money2)

输出结果:

1200 <class 'str'> 300 <class 'str'> 1500

4.2 空单元格带来的 NoneType 问题

另一个常见场景是空单元格。如果你没有提前判空,后面直接做计算,就很容易报错。

value=None# 错误示例:None 不能直接参与数字运算result=value+100

更稳的写法应该是先判断:

value=NoneifvalueisNone:value=0result=value+100print(result)

推荐做法:从 Excel 读取数据后,先抽样打印几个关键字段的值和类型,再决定是否需要转换、清洗或判空。

4.3 日期字段也不要轻易相信肉眼

Excel 里的日期也很容易迷惑人。单元格里显示为2026/05/30,Python 读出来可能是日期对象,也可能是字符串,也可能是 Excel 内部的序列值。这取决于你使用的库、单元格格式以及数据来源。

所以遇到日期字段,也建议先打印:

print(value,type(value))

日期字段的排查原则和数字字段一样:先确认真实类型,再决定是格式化显示、字符串处理,还是转换成日期对象。


5. type() + print():我最常用的排错组合拳

我写 Python 脚本时,遇到结果不对,第一反应通常不是马上改代码,而是先打印变量和类型。

print(value,type(value))

这句代码看起来很普通,但现场排错非常实用。它可以同时告诉我两个信息:变量当前的值是什么,以及 Python 把它识别成什么类型。

这张图展示的是type() + print()组合拳:先把值打印出来,再把类型打印出来,从而快速定位问题。

从图中能看出,12319.9"Excel"None的值和类型被放在一起观察。这个习惯很重要,因为很多时候只看值会误判,只看类型又不知道数据内容,两个一起看才完整。

比如下面这个例子,我想计算金额,但结果不对:

value="1200"print(value,type(value))# 看到是 str 后,再做转换value=int(value)print(value,type(value))

输出结果:

1200 <class 'str'> 1200 <class 'int'>

这个过程本质上就是:先确认问题,再做处理,最后再次验证。这比一上来就盲目转换要稳得多。

如果变量比较多,也可以把字段名一起打印出来,这样排错时更容易定位是哪一列出了问题:

name="金额"value="1200"print(name,value,type(value))

输出结果:

金额 1200 <class 'str'>

这个小习惯非常适合 Excel 自动化排错:字段名、字段值、字段类型一起看。


6. type() 排障流程:不要凭感觉改代码

真正写脚本时,我不建议看到报错就马上复制搜索结果。更稳的方式是按照一个固定流程排查:先看值,再看类型,再判断是否符合预期,然后再决定转换、清洗还是判空。

这张图展示的是type()的排障流程:发现结果异常后,不是直接乱改,而是按步骤确认数据状态。

从图中能看出,一个稳定的排错路径应该是:发现异常 → 查看值和类型 → 判断类型是否符合预期 → 做转换、清洗、判空 → 再次验证。**这套流程适合所有 Excel 自动化脚本,不只适合 type() 这一节。**

我把这个流程再整理成一张 Mermaid 图,方便后续复盘和写自己的脚本模板。

渲染错误:Mermaid 渲染失败: Parse error on line 3: ...型] B --> C[print(value, type(value)) ----------------------^ Expecting 'SQE', 'DOUBLECIRCLEEND', 'PE', '-)', 'STADIUMEND', 'SUBROUTINEEND', 'PIPE', 'CYLINDEREND', 'DIAMOND_STOP', 'TAGEND', 'TRAPEND', 'INVTRAPEND', 'UNICODE_TEXT', 'TEXT', 'TAGSTART', got 'PS'

推荐把 print(value, type(value)) 当作临时探针使用。调试时插进去,看清楚数据;问题解决后,再根据需要删除或改成日志输出。

不建议把大量 print 长期留在正式脚本里。正式脚本如果需要保留排查信息,更推荐写入日志文件,或者封装一个调试开关。


7. 用 type() 做分流处理

type()不只是用来打印,它也可以参与逻辑判断。比如我想处理一批 Excel 数据:如果是字符串,就先去掉空格再转数字;如果本来就是数字,就直接参与计算;如果是空值,就按 0 处理。

value=" 1200 "iftype(value)==str:value=value.strip()value=int(value)elifvalueisNone:value=0print(value,type(value))

输出结果:

1200 <class 'int'>

不过这里要说清楚:对于刚入门的读书笔记,用type()看类型很好理解;但在更严谨的 Python 写法里,判断类型时很多时候会使用isinstance()

value=" 1200 "ifisinstance(value,str):value=value.strip()value=int(value)print(value,type(value))

可以这样理解:type() 更适合“看清楚类型”,isinstance() 更适合“写判断逻辑”。

如果是 Excel 批量数据处理,建议把类型处理逻辑写得更稳一点:

value=" 1,200 "ifvalueisNone:value=0elifisinstance(value,str):value=value.strip().replace(",","")value=int(value)print(value,type(value))

输出结果:

1200 <class 'int'>

这里多处理了一个逗号,因为很多 Excel 报表里的金额或数量会显示成1,200。如果不先去掉逗号,直接int("1,200")会报错。

实际写 Excel 自动化脚本时,类型判断通常要和去空格、去逗号、判空、格式转换一起使用。


8. 常见问题与踩坑提醒

8.1 为什么我明明看到的是数字,Python 却识别成 str?

这通常是 Excel 单元格格式或数据来源导致的。比如别人从系统里导出的报表,金额字段可能被保存成文本;有些单元格前面有隐藏空格;还有一些数据是从网页复制进 Excel 的,看着像数字,实际是字符串。

不要靠肉眼判断 Excel 数据类型,脚本里一定要用 type() 或数据清洗逻辑确认。

8.2 为什么 print 出来的值一样,类型却不同?

比如1010.0打印出来都很像,但一个是int,一个是float。如果后续涉及 Excel 写回、格式化显示、金额保留小数,这个差异就会影响结果。

a=10b=10.0print(a,type(a))print(b,type(b))

输出结果:

10 <class 'int'> 10.0 <class 'float'>

8.3 空单元格为什么会影响脚本运行?

因为空单元格读出来可能是NoneNone不是字符串,也不是数字,它表示“没有值”。如果你直接对它做加法、字符串拼接或格式转换,就可能报错。

value=NoneifvalueisNone:print("这是空值,需要先处理")

8.4 是否应该到处都写 type()?

不需要。type()更适合排错和验证阶段。等脚本逻辑稳定后,可以把临时打印删掉,或者改成日志记录。否则脚本输出会变得很乱。

比较稳的做法是:开发阶段多打印,正式脚本少打印;临时调试看控制台,长期追踪写日志。

8.5 type() 能不能判断 Excel 里的单元格格式?

不能完全判断。type()看到的是 Python 读取到的对象类型,不是 Excel 单元格本身的显示格式。比如 Excel 里可以把数字格式设置成文本、日期、货币、百分比,但 Python 读取后具体是什么类型,还要看使用的库和读取方式。

所以 type() 解决的是“Python 当前拿到的值是什么类型”,不是“Excel 单元格原本设置了什么格式”。这两个问题不要混在一起。


9. 总结提升

这一节的核心不是背会type()这个函数,而是建立一个很实用的排错习惯:**当结果不符合预期时,先确认变量的值和类型,再判断代码逻辑。**

我建议把这句话记住:先打印,再看类型;先确认,再转换。

在 Python + Excel 办公自动化里,很多问题看似是代码问题,实际上是数据类型问题。比如字符串数字、空值、浮点数显示、日期序列号,这些都不是靠猜能解决的。type()的价值就在于,它能把“我以为”变成“我确认”。

如果只看表面值,不看真实类型,后面做汇总、统计、批量写回 Excel 时一定会踩坑。

所以我会把 type() 当成 Python 办公自动化入门阶段的“照妖镜”:它不复杂,但非常实用;它不能替你写完整业务逻辑,但能帮你快速判断问题到底出在哪里。

如果把这一节沉淀成自己的脚本习惯,我建议保留这套排错顺序:先打印字段名和值,再打印类型;确认类型后再转换;转换后再次打印验证。这个动作很小,但能明显减少无效排查时间。


返回顶部

http://www.jsqmd.com/news/931622/

相关文章:

  • 别再纠结选哪个了!2024年Unity热更新方案横向对比:XLua、ILRuntime、HybridCLR、Puerts到底怎么选?
  • Sora 2配音模型微调实战:用仅200条高质量中文配音样本,在3小时内完成角色音色迁移(含LoRA权重热加载代码)
  • 2026 年 6 月搭企业考试系统,选这款就够了 - 速递信息
  • 米哈游抽卡记录管理终极指南:如何永久保存和分析你的抽卡数据
  • 植物健康系统|基于SprinBoot+vue的植物健康系统平台系统(源码+数据库+文档)
  • 微信聊天记录永久保存终极指南:WeChatMsg完全免费的数据自主管理方案
  • 第二阶段Day05网络编程和多线程
  • 蓝牙串口模块AT指令配置实战:从HC-05原理到SH-B30应用
  • 三步搞定GitHub精准下载:DownGit终极解决方案
  • Linux RT 组调度:RT_GROUP_SCHED 的实时任务资源隔离
  • 别再盲目做增量预训练了!基于MedicalGPT项目,聊聊医疗大模型定制化的务实路线
  • 基于深度学习的路面裂缝检测系统(YOLOv12完整代码+论文示例+多算法对比)
  • 免费投票链接制作平台,投票小程序推荐 - 投票小程序
  • 论文答辩 PPT 别瞎熬了!okbiye AI PPT 按步骤来,半小时搞定
  • CANN/ops-blas stpttr算子实现
  • 如何3分钟快速掌握ChanlunX:通达信缠论自动化分析终极指南
  • 原神帧率解锁实战指南:从60帧到144帧的游戏体验革命
  • Sora 2编码参数“黑箱”破译(含H.266/VVC兼容性约束、LLM-guided rate分配协议、GPU显存感知型码控算法),全网首发技术白皮书节选
  • 电磁冷热量计源头厂家推荐榜:2026年国产十大品牌综合实力深度解析 - 液体流量液位品牌推荐
  • 服务器 数据恢复
  • 答辩 PPT 别再熬大夜了!用 okbiye AI PPT,论文党也能一键通关毕业季
  • 别再硬啃官方文档了!用Scanpy搞定单细胞分析,这份避坑指南帮你省下80%时间
  • TigerVNC终极实战指南:打造跨平台高效远程桌面环境
  • 如何永久保存微信聊天记录:三步搞定数据备份的完整指南
  • 零代码入门:用Arduino与电位器轻松控制智能LED灯带
  • 89.高频刷机报错汇总:Super分区失败、MTK卡DA、DFU无法识别彻底解决
  • 【初阶数据结构】 升沉有序的平仄 排序 3
  • 猫抓扩展故障修复:6个实用场景快速解决资源嗅探问题
  • 告别启动失败:详解CentOS 7下RabbitMQ安装后的那些‘坑’与优化配置
  • 20251914 2024-2025-2 《网络攻防实践》实践十报告