我正在尝试创建一个目录。如果名称已存在,则会附加" _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
答案 0 :(得分:4)
因为在异常的情况下根本没有调用return
语句,所以该函数返回默认值None
(如果你写了一个,那么你得到的返回值是相同的。没有返回值的裸return
语句。
在return
子句中添加except
语句,以返回您想要的任何内容。