Будет ли Python пропускать чтение условия «else», если условие «if» уже было выполнено?

Я смотрю на поток выполнения для некоторого моего кода, и мне интересно, будет ли работать следующее.

В частности, я смотрю на предложение 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);

person user1991892    schedule 06.08.2013    source источник
comment
else не имеет условия. Либо используйте else:, либо elif condition:.   -  person Hyperboreus    schedule 07.08.2013


Ответы (1)


Вы не можете использовать условное выражение после else, только после elif. elif проверяется только, если предшествующие условия if или 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 не совпало.

Цитата из if документации по операторам:

Он выбирает ровно один из наборов, оценивая выражения одно за другим, пока одно из них не окажется истинным [...]; затем этот набор выполняется (и никакая другая часть оператора 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

Обратите внимание, что условие elif полностью игнорируется; если бы это было не так, было бы возбуждено исключение.

person Martijn Pieters    schedule 06.08.2013