首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不返回值的Python递归函数

不返回值的Python递归函数
EN

Stack Overflow用户
提问于 2014-06-04 10:46:26
回答 1查看 683关注 0票数 0

这是我在这里的第一个问题,所以如果我写得太多,提前感谢你看了,我最诚挚的道歉。

问题:

我已经编写了一个函数,如果有必要的话,应该调用它自己x次,如果不成功的话,什么都不返回。但是,当函数看起来很成功时,它仍然不返回。

背景:我有一些目录,代表了2009年的几个月。但是,并不是所有的月份都存在,因此,如果是这样的话,我希望得到前一个月,检查该月份的目录是否存在,如果不继续,最多返回一个月,最多6个月。

在下面的date_tag中可以看到09个月,在我的测试用例中不存在这个月份。08或07也不行。因此,函数应该返回06,但却不返回任何。

代码语言:javascript
复制
import pdb
import generate_months_module
import os

date_tag = '2000/2000/2009/09'
tree_location = '/Users/kelly/Documents/projects/komm/data/directory-tree/'

def iterateOverMonths(date_tag, x):
    if x <= 0:
        return_string = 'no dates found'
        return return_string
    else:
        new_date = generate_months_module.handleDateShifts(date_tag)[1]
        print '\tNEW DATE after calling handleDateShifts' + new_date
        full_path = tree_location + '/' + new_date
        if checkDirectoryExistance(full_path) == True:
            print '\t'+ full_path + ' is a real path'
            return full_path
        else:
            print 'dir does not exist'                                                                                                                       
            iterateOverMonths(new_date, x-1)

def checkDirectoryExistance(dir_path):
    "check if a directory exists, return true or false"
    if os.path.isdir(dir_path) == True:
        return True
    else:
        return False

print iterateOverMonths(date_tag, 6)

generate_months_module.handleDateShifts应该只是得到前一个月并返回它。(这在其他测试用例中有效,所以我非常怀疑问题在这里!)

我的输出结果是:

代码语言:javascript
复制
6
    NEW DATE after calling handleDateShifts2000/2000/2009/08
    dir does not exist
5
    NEW DATE after calling handleDateShifts2000/2000/2009/07
    dir does not exist
4
    NEW DATE after calling handleDateShifts2000/2000/2009/06

    /Users/kelly/Documents/projects/komm/data/directory-tree/2000/2000/2009/06 is a real path

    returning full path
    None

当我在“返回pdb.set_trace”之前使用full_path()时,尽管IF子句是True,因此写入了我想返回的"full_path“变量,但函数似乎再次被调用。

为什么没有返回路径"/Users/kelly/Documents/projects/komm/data/directory-tree/2000/2000/2009/06“??

进口功能:

如果您对此感兴趣并希望重新创建它,handleDateShifts函数如下所示(对不起,这有点麻烦):

代码语言:javascript
复制
def handleDateShifts(corpus_date_string):
    "get background corpus date strings ALSO call this function if month does not exist and need to go back even further"
    century, decade, year, month = corpus_date_string.split('/')
    if month == '01' or month == '02':
        #handle date boundaries which can affect year, decade and cent                                                   
        background_mo_1 = '11'
        background_mo_2 = '12'
        millenium_shift = re.search('[1-9][0][0][0]$', year)
        century_shift = re.search('[1-9][0][0]$', year)
        decade_shift = re.search('[1-9][0]$',year)
        if century_shift or millenium_shift:
            century = int(year) - 100
            decade = int(year) - 10
            year = int(year) - 1
        elif decade_shift:
            decade = int(year) - 10
            year = int(year) - 1
        elif not decade_shift and not century_shift:
            year = int(year) - 1
        background_1_string = str(century) +'/'+ str(decade) +'/'+ str(year) +'/'+ str(background_mo_1)
        background_2_string = str(century) +'/'+ str(decade) +'/'+ str(year) +'/'+ str(background_mo_2)
    else: #the cent/dec/year can stay the same                                                                           
        background_mo_1 = int(month) - 2
    background_mo_2 = int(month) - 1
        if len(str(background_mo_1)) == 1:
            background_mo_1 = '0' + str(background_mo_1)
        if len(str(background_mo_2)) == 1:
            background_mo_2 = '0' + str(background_mo_2)
        background_1_string = str(century) +'/'+ str(decade) +'/'+ str(year) +'/'+ str(background_mo_1)
        background_2_string = str(century) +'/'+ str(decade) +'/'+ str(year)+'/'+ str(background_mo_2)
    return background_1_string, background_2_string
EN

回答 1

Stack Overflow用户

发布于 2014-06-04 10:49:05

在此分支中不返回任何内容(结果丢失):

代码语言:javascript
复制
    else:
        print 'dir does not exist'                                                                                                                       
        iterateOverMonths(new_date, x-1)

如果函数在没有显式return <smth>的情况下运行它的过程,则返回None

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24035391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档