针对一个完全没有接触过的程序,特别是没有注释的情况下,会存在碰到很多问题,虽然在别人机器上已经跑通了,但是在copy到自己机器上也会跑不通,最主要的原因有几种情况.

- 系统环境不一致
- 程序本身有bug,或者存在
系统环境不一致也分很多种
- 操作系统层级的不一致, Linux 系统 Windows系统, macos 系统,不同的环境经常会在以下情况下不一致.
- python环境的不一致, 目前已知的python会在本机存在多套环境,且anaconda会自己管理安装python环境,所以可能存在 操作系统的python环境是好的,但是conda 环境没有好,反之也会存在
- 程序缺少必要的模块包(此处针对python) ,比如 运行本次图像识别,需要导入的包,这种比较简单,通过跑第一步的import就可以知道,如果少了包,系统会有报错提示.
- 引入的模块包版本不一致, 不同的模块包会存在不兼容的情况,此种很正常,因为前期设计架构的不合理,为了性能或者易用性,会存在后续版本不兼容前期版本的情况,又或者依赖的其他模块必须是指定的版本,因为不同的版本的API是不一样.
程序本身有bug,这种情况需要针对性的分析,可能的情况
- 本身程序的健壮性不行,没有考虑到可能的异常情况.
- 本身程序需要运行的环境苛刻,比如需要配置大内存,大磁盘,对机器性能有要求.
- 高并发多线程情况下的结果不符合预期(这种在python应该比较少见)
第一种情况比较常见因为程序的编写者水平的问题,或者时间问题,以及实现时需求方并没有要求适配那么多情况 .如果发生了程序运气不符合预期, 需要进行以下的排查思路
- 根据报错日志,查看具体的代码报错行号 举例:
FileNotFoundError Traceback (most recentcalllast)ipython-input-2-7af0422b3658inmodule9img_size=6410--- 11 train_labels = list(paths.os.listdir(traindata))12test_labels =list(paths.os.listdir(testdata))13FileNotFoundError: [WinError3] 系统找不到指定的路径。:'datatrain'
FileNotFoundError Traceback (most recentcalllast)ipython-input-2-7af0422b3658inmodule9img_size=6410--- 11 train_labels = list(paths.os.listdir(traindata))12test_labels =list(paths.os.listdir(testdata))13FileNotFoundError: [WinError3] 系统找不到指定的路径。:'datatrain'
- 逐行解读代码,了解代码具体执行的含义,如果不懂某行代码的含义,可以搜索引擎查询关键字,了解
- 检查代码符合预期但是执行结果不符合预期,那就增加日志打印,有debug条件的请debug调试,没有debug条件的请通过日志打印的方式,查看代码的执行情况.
- 逐行解决,直到符合预期
此种情况,稍微有些棘手,一般我通过以下方式进行排查
- 检查程序是否存在把异常吃掉的情况,比如在常见的 文件读取,网络访问,数据格式转换等等,都会存在.此种情况,请把异常情况抛出来.
- 补充程序日志,这种情况需要补充部分关键点的日志打印,用来定位程序出错的行数.
- 以上均只是针对单机程序的问题排查,针对分布式或者高并发多线程的情况,此种问题排查更加复杂,而且很多情况很难复现,这里不多说了,应该暂时用不到.
- 以上是在阅读或者学习其他人代码时,进行的一些经验总结.