0

一部のコードの実行フローを見ていますが、次のように動作するかどうか疑問に思っています。

具体的にはelse、この条件ツリーの節を見ています。構成パスがメモリに指定されていない場合は、構成パスを入力として受け取る関数を取得します。私が正しい入力をしたとしましょう。declareConfPath()実行時に何かが指定されているかどうかをチェックした後に、コンピューターが条件付き埋め込みを実行する理由はありませんdeclareConfPath()

私の質問は、プログラムがケースをスキップするelseか、またはケースを読み取り、ツリーの最初のケースで指定されelseた新しい値を取るかです。スキップしない場合は、別のツリーを使用する代替ソリューションよりもはるかにまばらに必要なすべての条件を解決したことになります。そうでない場合は、数行のコードを複製する必要があります。それは高価ではありませんが、エレガントでもありません。confPathdeclareConfPath()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);
4

1 に答える 1

6

after の条件は使用できません。 afterelseのみelifです。前または条件が一致しなかった場合elifのみチェックされます。ifelif

デモ:

>>> 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を設定しても、条件が一致しませんでした。bazelif

if声明のドキュメントからの引用:

式を 1 つずつ評価して、いずれかが true になるまでスイートを1 つだけ選択します [...]; 次に、そのスイートが実行されます (ステートメントの他の部分ifは実行または評価されません)。すべての式が false の場合、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

elif条件が完全に無視されていることに注意してください。そうでない場合は、例外が発生します。

于 2013-08-06T21:36:07.117 に答える