Python异常 - 循环中具有try ... except子句的函数

时间:2014-08-28 23:46:29

标签: python exception

我经常遇到这样的情况:

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

哪个情况比第一个更糟?

4 个答案:

答案 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)

OSErrorcustom_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)])

您可以看到目录创建失败,目录已成功创建