如何优雅地处理for循环中的多个continue语句

时间:2019-10-30 15:50:19

标签: python python-2.7

我一直在为其中一个项目重构整个代码库。基本上将代码模块化为单独的模块,具有单一职责的类,将意大利面条功能分解为小的方法等。

但是,我想知道我们如何干净/优雅地处理下面的代码块,如果具有条件,则该代码块具有多个条件 。想法是使其更小更干净。对于其他情况,无论何时找到多个 if-and 语句,我都会使用谓词。但是这里的情况几乎没有什么不同,因为它们针对不同的条件打印不同的日志消息。

def somefunc(*args, **kwargs):
    for p_key, p_det in somedict.iteritems():

            get_all_somevars(p_det)

            if somevar1 and somevar2 is None:
                continue

            if somevar3 is None:
                logger.info('some message')
                continue

            if somevar4 is None:
                logger.info('some message')
                continue

            somevar5 = x.split('\n')
            somevar6 = y.split('\n')

            somevar7 = do_something_2(somevar5, somevar6)


            if somevar7 is None:
                logger.info('some message')
                continue

            do_something_3()

1 个答案:

答案 0 :(得分:2)

某些质量代码检查拒绝在循环内进行多次继续(例如,超过2个)。

发生这种情况时,您可以将所有这些条件包装到一个单独的方法中,该方法将返回true / false并进行相应记录。

我不知道其他清理方法。

编辑:(伪代码)

def somefunc(*args, **kwargs):
    for p_key, p_det in somedict.iteritems():

        do_something_1()

        if should_skip_that_loop(args)
            continue

        somevar5 = x.split('\n')
        somevar6 = y.split('\n')

        somevar7 = do_something_2(somevar5, somevar6)


        if somevar7 is None:
            logger.info('some message')
            continue

        do_something_3()

def should_skip_that_loop(*args, **kwargs):
        if somevar1 and somevar2 is None:
            return True

        if somevar3 is None:
            logger.info('some message')
            return True

        if somevar4 is None:
            logger.info('some message')
            return True
        return False