重要性
写程序的80%的时候都是在发现问题,解决问题.因此快速排查问题可以大大提升效率.
提取问题
提取问题 ==> 分析问题 ==> 解决问题
通常我们的出错是一个文件中的,因此含有很多与问题无关的信息.提取问题有助于更好地去把问题解决.例如下面的程序倒数第二行报错了, 可以把直接把依赖的两个变量lib_code_report_frm
与scrpt_code_report_frm
保存到pickle中去:
#coding=utf-8
from cc.codereporter.code_report import CodeReport
from yfrm import pd
from yiobhv.ftp_bhv import FtpBhv
import datetime
import os
import scancode.config as cf
from mnglog import save_log
yescrit_get_code_report = CodeReport(root='yescript')
ylib_get_code_report = CodeReport(root='ylib')
ftpbhv = FtpBhv()
def get_code_info(get_code_report,dir,title_num_list):
"""
得到dir目录下的py文件代码信息作者信息汇总
:param dir:文件目录
:return:dataframe数据
"""
assert isinstance(dir,str)
code_report_frm = get_code_report.get_code_report(dir,title_num_list)#
return code_report_frm
def get_merge_code_info(ylib_dir, yescript_dir):
"""
得到dir目录下的py文件代码与作者信息以html格式的文件保存到ftp服务器上
:param ylib_dir:
:return:
"""
assert isinstance(ylib_dir, str)
lib_code_report_frm = get_code_info(ylib_get_code_report,ylib_dir,[cf.CODE_WO_IMPORT_NUM,cf.CLASS_NUM])
lib_code_report_frm[cf.AVERAGE_LINES] = lib_code_report_frm[cf.CODE_WO_IMPORT_NUM] / lib_code_report_frm[cf.CLASS_NUM]
scrpt_code_report_frm = get_code_info(yescrit_get_code_report,yescript_dir,[cf.DEF_NUM])
assert isinstance(lib_code_report_frm, pd.DataFrame)
lib_code_report_frm.sort_values(by='author').reset_index()
scrpt_code_report_frm.sort_values(by='author').reset_index()
frm = pd.merge(lib_code_report_frm,scrpt_code_report_frm) #这一步有问题
return frm
然后在专门的test_learn.py文件中,读入之前的结果来做调试. 这样就简化多了.
from yfrm import pd
def test_1():
lib_code_report_frm = pd.read_pickle(r'D:\GoogleDrive\2_2017Dev\Py\codereview\lib_frm.frm')
scrpt_code_report_frm= pd.read_pickle(r'D:\GoogleDrive\2_2017Dev\Py\codereview\script_frm.frm')
frm = pd.merge(lib_code_report_frm, scrpt_code_report_frm) # 这一步有问题
pass
如果自己是在搞不定,可以把pickle文件与test_1代码发给别人,也能够及时得到解答.
定位具体出错在哪一行
在执行的时候发现有报错,不明白为什么try语句没有catch到.而没有细致看pytest报告是在自己的代码的哪一行出错.
image.png
image.png
结果发现是在try上面就报错了. 如果需要问他人的时候,首先要标注好自己的代码的哪一行出了问题.