一个小小空格问题引起的bug
程序员会遇到一种情况,一个bug排查到最后是由一个很小的问题导致的。在昨天的日常搬砖中遇到一个问题,耽搁了我大半天的时间,最后查明原因让我很无语。
首先介绍一下背景,我是做算法模型训练,目前手上的工作是迭代一个算法,添加最新的数据集训练出一个精度更好的模型。
拿到标注好的xml的数据集,我首先做了一个格式的转换和数据集的拆分。使用的代码如下:
将前1200张保存为测试集
保存好的格式是:
然后我就配置好参数,愉快的启动了训练。结果还没跑多久,就报错了。经过排查,报错的代码如下:
报错的信息是:20240824/0f4963ca91ff7c26d66c69b028415243b8a8a405.jpg has broken ... : NoneType has no shape。
我第一反应就是这个图片可能是损坏了,最简单的验证方法就是用opencv的库show一下。按照这个思路我打开了一个python终端,在终端中show图片。
这么检查下来,发现也没有问题啊,图片明明没有损坏。
然后我猜测难道是图片的权限或用户组问题导致不可读吗?于是检查了文件的权限
读写权限和用户组都没问题。奇怪了,到底是啥问题呢?
这时我就准备祭出断点大招,在图片读取之前打一个断点,断点一步步向下走,看看是哪里的问题。结果断点也打不上。因为这个函数是放在线程池中执行的,每次8个线程并发执行,遇到断点就直接退出了。
断点也不行,那我就没招了。其实我打端点就是想看看文件的路径是不是有问题,既然不能看每一个,那我干脆就看所有的。所以我打印了所有图片路径列表的变量,于是发现了问题。
原来每一个图像路径的后面都多了一个空格,我恍然大悟,怪不得用python终端show的时候没有发现,终端里面不打印空格标识。我从终端里复制图像路径,根本不知道路径的后面还有一个空格。
而且回过头来再看空格是哪来的,就是在数据集处理的时候随手多打了一个空格。
这个问题本来不难发现,但是由于第一空格在终端里面不展示导致没发现这个空格,第二想要断点调试时由于程序在线程池中断点也不生效,导致也不能断点调试变量,不能发现这个空格。
在一些巧合之前,让我折腾了大半天的时间,最后才解决这个问题。程序员的日常就是和各种bug斗智斗勇。
__EOF__

本文链接:https://www.cnblogs.com/goldsunshine/p/18386910.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2023-08-29 peewee update和save性能分析