为什么这个try/except/else函数返回None?
我正在尝试创建一个文件夹。如果这个文件夹的名字已经存在,那么就会在文件夹名字后面加上“_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的回答在“existing_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 个回答
4
因为在出现异常的情况下,根本没有调用到 return
语句,所以这个函数会返回一个默认值 None
(这就像你写了一个没有返回值的 return
语句时得到的结果一样)。
如果你想返回其他的值,可以在 except
语句块中添加一个 return
语句,返回你想要的内容。