繁体   English   中英

嵌套 if - 在满足嵌套 if 语句中的条件时继续 elif

[英]Nested if - proceed to elif upon meeting a condition in the nested if statement

我的问题是关于带有 if 语句和 arrays 的控制流,基本上,我将一些信息提取到数组 x(给定条件 a、b)中,并且根据是否提取了一些信息或没有信息来执行流程。 我的代码如下所示:

if a:
   x = ...
   if not x:
      if b: #repeated
         x = ...
         if not x:
            raise Exception
elif b: #repeated
         x = ...
         if not x:
            raise Exception

有没有什么优雅的方法可以在“if not x”之后自动跳到 elif 条件? 我的主要关注点是 a,如果 a 不存在或不包含任何信息,我正在检查 b 的存在以及它是否为空。 如果 b 为空,我将引发异常(这里我实际上可能会继续进行 else: raise Exception 但是它与上述相同,我不知道如何控制这样的流程,即重定向到另一个语句)。

我尝试过“break”,但它不适用于未嵌套在 for/while 循环中的语句。

提前致谢!

基于评论的一些澄清

  1. x 被分配给一个 xmltree 元素,并且元素对于 a 和 b 是不同的,
  2. 'if a' 是关于检查 item1 是否存在于数组中,然后我正在检查分配给它的 xml 树中的元素是否包含一些信息,如果没有,我将使用默认选项 b,并检查 item2 现在是否存在以及是否包含信息; 如果上述情况都不是 - 程序此时应退出

假设对x的赋值是相同的(或者至少只在使用的值ab上有所不同,您可以使用带有else子句的循环:

for thing in [a,b]:
    if not thing:
        continue
    x = ...  # can depend on thing
    if x:
        break
else:
    raise Exception

else子句仅在循环因迭代耗尽而终止时执行,而不是在执行break语句时执行。

由于上下文有限,我只能想象你想要什么。 如果您使用 python 3.10,您可能可以将match语句用于您的用例。 这是我想象的样子,但我们可以在评论中进一步翻新:

class XMLNode:

    def __init__(self, subnode, label):
        self.subnode = subnode
        self.label = label

node = ...

match node
    case XMLNode(subnode=a, label=_):
        pass
    case XMLNode(subnode=b, label=_):
        pass

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM