我经常遇到这样的情况:
import os
for i in range(10):
os.mkdir(i)
但是,有时目录已经存在,在这种情况下,os.mkdir会抛出OSError。当发生这种情况时,我只是希望它跳过循环的其余部分并移动到i的下一次迭代,所以我经常写这样的东西:
for i in range(10):
try:
os.mkdir(i)
except OSError:
continue
但是,我真正想要的是一个封装该行为的函数。像这样:
def custom_mkdir(directory):
try:
os.mkdir(directory)
except OSError:
continue
这样我就可以得到这样的代码:
for i in range(10):
custom_mkdir(i)
如果它不存在则创建目录的预期行为,但如果它存在则跳转到for循环的下一个交互。
但是,continue语句不能以这种方式包含在函数中。那么如何在不诉诸:
的情况下获得预期的行为for i in range(10):
try:
custom_mkdir(i)
except OSError:
continue
哪个情况比第一个更糟?
答案 0 :(得分:5)
好吧,如果循环中没有其他内容可以执行此操作:
def custom_mkdir(directory):
try:
os.mkdir(directory)
except OSError:
pass
for i in range(10):
custom_mkdir(i)
如果custom_mkdir
以下的代码实际上更多,我认为您可以做的最好的是:
def custom_mkdir(directory):
try:
os.mkdir(directory)
return True
except OSError:
return False
for i in range(10):
if not custom_mkdir(i):
continue
或
for i in range(10):
if custom_mkdir(i):
# The rest of the logic in here
至少比原版更简洁。
答案 1 :(得分:2)
当OSError
被custom_mkdir
捕获时, 想要做的功能就是什么都不做。所以,什么都不做:
def custom_mkdir(directory):
try:
os.mkdir(directory)
except OSError:
pass
答案 2 :(得分:0)
回来一个布尔:
def custom_mkdir(directory):
try:
os.mkdir(directory)
except OSError:
return False
return True
for i in range(10):
if not custom_mkdir(directory): continue
答案 3 :(得分:0)
代码:
def cusyom_mkdir(diectory):
try:
os.mkdir(directory)
return True
except OSError:
return False
status = map(cusyom_mkdir,[i for i in range(10)])
或
def cusyom_mkdir(diectory):
try:
os.mkdir(directory)
return True, directory
except OSError:
return False, directory
status = map(cusyom_mkdir,[i for i in range(10)])
您可以看到目录创建失败,目录已成功创建