我正在查看我的一些代码的执行流程,我想知道以下内容是否有效。
具体来说,我正在查看此条件树中的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);
答案 0 :(得分:5)
仅在else
之后才能使用elif
之后的条件。如果前面的elif
或if
条件符 匹配,则<{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
在第一个区块中设置为foo
,baz
条件也不匹配。
通过逐个评估表达式来选择恰好一个套件,直到发现一个为真[...];然后执行该套件(
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
条件;如果不是,则会引发例外。