while循环的重构
2018-08-10 本文已影响0人
sidyph
一、问题的提出
如下图所示,有一个collect_frm函数,函数的目标是在一个时间段内(date_begin至date_over)获取巨潮资讯的公告数据,并转化为DataFrame格式,保存到frm_path里。
目前通过while循环来实现在这个时间段内的循环,并且设计了一旦遇到except就把当天的任务重启,如果重启5次还没能成功,则跳出循环并且报错。
问题的引出: while这种实现方式耦合比较紧密,想把函数直接拆成多个函数比较困难。
图1 重构前的程序二、分析
while实现循环过程。思考循环的实现,其实更普遍的是用for循环来实现。在这里,while实现在时间段里的循环,则可以考虑得到这个时间段的列表。然后用for循环这个列表。这样可以规避函数最底部的if判断语句和break跳出循环语句。获得时间列表,可以用pd的date_range的方法获得。
重启次数的循环过程。在上图中重启次数是通过loc参数进行控制的,其实很不方便。依然可以用for循环考虑。循环的次数就是重启的次数。
三、重构
图2 重构后的程序可以看到:
-利用pd.date_range获得了day_list
-利用for循环对day_list进行遍历,完成主要程序实现功能
-利用deal_1day函数处理重启过程
-利用deal_error函数实现超过5次程序中断