如果'if'条件已经运行,Python是否会跳过阅读'else'条件?

时间:2013-08-06 21:31:46

标签: python if-statement conditional skip

我正在查看我的一些代码的执行流程,我想知道以下内容是否有效。

具体来说,我正在查看此条件树中的else子句。如果在内存中没有指定配置路径,我将得到一个将配置路径作为输入的函数。假设我给出正确的输入。计算机没有理由在declareConfPath()之后运行条件嵌入,检查运行declareConfPath()时是否指定了任何内容。

我的问题是,如果程序跳过else案例,或者它是否会读取else案例,并会采用由confPath指定的新值declareConfPath()在树上的第一个if案例中。如果它没有跳过,那么我已经解决了所有必要的条件,而不是一个涉及另一棵树的替代解决方案。如果没有,那么我需要复制几行代码。这不贵,但也不优雅。

也可能是因为使用elif代替if可能会得到我想要的,但我不知道。

confPath = None; # or if the file when opened is empty?
_ec2UserData = None;
localFile = False;

# As we are dealing with user input and I am still experimenting with what information counts for a case, going to use try/except.

# Checks if any configuration file is specified
if confPath == None: #or open(newConfPath) == False:
    # Ask if the user wants to specify a path
    # newConfPath.close(); <- better way to do this?
    confPath = declareConfPath();
    # If no path was specified after asking, default to getting values from the server.
    if confPath == None:
        # Get userData from server and end conditional to parsing.
        _ec2UserData = userData(self);
    # If a new path was specified, attempt to read configuration file
    # Does the flow of execution work such that when the var is changed, it will check the else case?

else confPath != None:
    localFile = True;
    fileUserData = open(confPath);

1 个答案:

答案 0 :(得分:5)

仅在else之后才能使用elif之后的条件。如果前面的elifif条件符 匹配,则<{1}} 检查

演示:

elif

即使>>> foo = 'bar' >>> if foo == 'bar': ... print 'foo-ed the bar' ... foo = 'baz' ... elif foo == 'baz': ... print 'uhoh, bazzed the foo' ... foo-ed the bar 在第一个区块中设置为foobaz条件也不匹配。

引用if statement documentation

  

通过逐个评估表达式来选择恰好一个套件,直到发现一个为真[...];然后执行该套件( elif语句的其他部分不执行或评估)。如果所有表达式都为false,则执行if子句的套件(如果存在)。

强调我的。

事实上,这也延伸到其他条件

else

注意完全忽略>>> if True: ... print "first condition matched" ... elif int("certainly not a number"): ... print "we won't ever get here, because that's a `ValueError` waiting to happen" ... first condition matched 条件;如果不是,则会引发例外。