为什么这个try / except / else函数返回None?

时间:2014-04-10 23:34:27

标签: python exception

我正在尝试创建一个目录。如果名称已存在,则会附加" _1"递归到目录名。

如果目录不存在,则运行正常。如果目录已经存在,它也可以正常运行(它创建目录+" _1"并返回相同的内容)。但是,如果目录+" _1"已存在,然后该函数创建目录+" _1_1"但是返回None。

import os

def recurs_mkdir(out_dir):
    try:
        os.mkdir(out_dir)
    except OSError:
        out_dir += "_1"
        recurs_mkdir(out_dir)
    else:
        print "Returning: %s" % out_dir
        return out_dir

>>> print recurs_mkdir("existing_folder")
Returning: existing_folder_1
None

为什么在异常的情况下它会返回None?

编辑: Nneoneo的答案有效,如果" exisiting_folder"存在,但如果" existing_folder"则表现不正常和" existing_folder_1"存在。修改后,功能是

import os

def recurs_mkdir(out_dir):
    try:
        os.mkdir(out_dir)
    except OSError:
        out_dir += "_1"
        recurs_mkdir(out_dir)
        print "Returning: %s" % out_dir
        return out_dir
    else:
        print "Returning: %s" % out_dir
        return out_dir

如果" existing_folder"已创建:

>>> recurs_mkdir("existing_folder")
Returning: existing_folder_1
Returning: existing_folder_1
existing_folder_1

如果" existing_folder"和" existing_folder_1"已存在:

>>> recurs_mkdir("existing_folder")
Returning: existing_folder_1_1
Returning: existing_folder_1_1
Returning: existing_folder_1
existing_folder_1

编辑2: 来自Nneoneo的回答

import os

def recurs_mkdir(out_dir):
    try:
        os.mkdir(out_dir)
    except OSError:
        out_dir += "_1"
        return recurs_mkdir(out_dir)
    else:
        print "Returning: %s" % out_dir
        return out_dir

1 个答案:

答案 0 :(得分:4)

因为在异常的情况下根本没有调用return语句,所以该函数返回默认值None(如果你写了一个,那么你得到的返回值是相同的。没有返回值的裸return语句。

return子句中添加except语句,以返回您想要的任何内容。