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

2024-04-26 20:48:15 发布

您现在位置:Python中文网/ 问答频道 /正文

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

但是,我想知道我们如何干净/优雅地处理下面的代码块,该代码块具有多个if条件和continue语句。我们的想法是把它变小,变干净。对于其他情况,无论在哪里找到多个if和语句,我都使用谓词。但这里的情况差别不大,因为它们针对不同的条件打印不同的日志消息。你知道吗

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()

Tags: 代码infononemessageifis情况some
1条回答
网友
1楼 · 发布于 2024-04-26 20:48:15

一些质量代码评审拒绝循环内的多个continue(例如超过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

相关问题 更多 >