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

use*_*183 2 python exception

我经常遇到这样的情况:

import os

for i in range(10):
    os.mkdir(i)
Run Code Online (Sandbox Code Playgroud)

但是,有时一个目录已经存在,在这种情况下,os.mkdir会抛出一个OSError.当发生这种情况时,我只是希望它跳过循环的其余部分并移动到i的下一次迭代,所以我经常写这样的东西:

for i in range(10):
    try:
        os.mkdir(i)
    except OSError:
        continue
Run Code Online (Sandbox Code Playgroud)

但是,我真正想要的是一个封装该行为的函数.像这样的东西:

def custom_mkdir(directory):
    try:
        os.mkdir(directory)
    except OSError:
        continue
Run Code Online (Sandbox Code Playgroud)

所以我可以有这样的代码:

for i in range(10):
    custom_mkdir(i)
Run Code Online (Sandbox Code Playgroud)

具有预期的行为,如果目录不存在,它会跳转到for循环的下一个交互,如果它存在的话.

但是,continue语句不能以这种方式包含在函数中.那么如何在不诉诸的情况下获得预期的行为:

for i in range(10):
    try:
        custom_mkdir(i)
    except OSError:
        continue
Run Code Online (Sandbox Code Playgroud)

哪个比第一个更糟?

dan*_*ano 5

好吧,如果循环内部没有其他内容,你可以这样做:

def custom_mkdir(directory):
    try:
        os.mkdir(directory)
    except OSError:
        pass

for i in range(10):
    custom_mkdir(i)
Run Code Online (Sandbox Code Playgroud)

如果下面有更多的代码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
Run Code Online (Sandbox Code Playgroud)

要么

for i in range(10):
    if custom_mkdir(i):
        # The rest of the logic in here
Run Code Online (Sandbox Code Playgroud)

至少比原作简洁一点.