首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python:避免嵌套IF语句的流程

Python:避免嵌套IF语句的流程
EN

Stack Overflow用户
提问于 2016-07-28 21:44:16
回答 3查看 2.5K关注 0票数 1

我有一个进程(类),我将其拆分成几个步骤(方法)。只有在前一步成功的情况下,才能调用每个步骤。我创建了一个run()方法,它通过在调用下一个步骤之前检查每个步骤来运行进程:

代码语言:javascript
复制
def run(self):
    status = False
    if step_1():
        if step_2():
            if step_3():
                etc... [several nested IFs]
                status = True
            else:
                self.logger.error('Error in step 3')
        else:
            self.logger.error('Error in step 2')
    else:
        self.logger.error('Error in step 1')
    return status

有没有更优雅的方式(一种设计模式?)为了避免这些嵌套的IF语句?

非常感谢,

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-07-28 21:49:58

您可以将您的步骤放在一个列表中:

代码语言:javascript
复制
my_plan = (step1, step2, step3, ..., stepN)

然后在循环中执行它们:

代码语言:javascript
复制
for step in my_plan:
   if not step():
      print 'Error in %s' % step.__name__
      status = False
      break
else:
    status = True
票数 14
EN

Stack Overflow用户

发布于 2018-07-08 06:43:27

如果你没有太多的步骤,或者你不想把你的步骤函数放在一个序列中,这是另一种选择。

代码语言:javascript
复制
def run(self):
    status = step_1():
    if status:
        status = step_2():
    if status:
        status = step_3():

    etc... [several IFs]

    if status is False:
        self.logger.error('Error')

    return status
票数 0
EN

Stack Overflow用户

发布于 2016-07-28 22:27:37

可以把它看作是失败的returning False,而不是传递returning。

代码语言:javascript
复制
def run(self):
    if not step_1():
        self.logger.error('Error in step 1')
        return False
    if not step_2():
        self.logger.error('Error in step 2')
        return False
    if not step_3():
        self.logger.error('Error in step 3')
        return False
    return True
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38638292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档