Помните, если вы используете sudo для привязки к порту 80 и используете переменные env PORT & amp; NODE_ENV вы должны повторно экспортировать эти вары, поскольку теперь вы находитесь под корневым профилем, а не с вашим профилем пользователя. Итак, чтобы заставить это работать на моем Mac, я сделал следующее:
sudo su
export NODE_ENV=production
export PORT=80
docpad run
Предложение else
выполняется только тогда, когда ваше условие while
становится ложным. Если вы break
вышли из цикла или если возникло исключение, оно не будет выполнено.
Один из способов думать об этом - это как конструкция if / else относительно условия:
if condition:
handle_true()
else:
handle_false()
аналогична конструкции цикла:
while condition:
handle_true()
else:
# condition is false now, handle and go on with the rest of the program
handle_false()
Пример может быть в строках:
while value < threshold:
if not process_acceptable_value(value):
# something went wrong, exit the loop; don't pass go, don't collect 200
break
value = update(value)
else:
# value >= threshold; pass go, collect 200
handle_threshold_reached()
Оператор else:
выполняется тогда и только тогда, когда цикл while больше не соответствует его условию (в вашем примере, когда n != 0
является ложным).
Таким образом, выход будет следующим:
5
4
3
2
1
what the...
Это полезно для социального взаимодействия.
while (Date != "January 1st"):
time.sleep(1)
else:
print("Happy new year!")
Мой ответ будет сосредоточен на КОГДА мы можем использовать while / for-else.
На первый взгляд кажется, что при использовании
while CONDITION:
EXPRESSIONS
print 'ELSE'
print 'The next statement'
и
while CONDITION:
EXPRESSIONS
else:
print 'ELSE'
print 'The next statement'
Поскольку оператор print 'ELSE'
, как представляется, всегда выполняется в обоих случаях (оба, когда цикл while
закончен или не запущен).
Тогда это отличается только тогда, когда оператор print 'ELSE'
не будет выполнен. Когда внутри [code] while
In [17]: i = 0
In [18]: while i < 5:
print i
if i == 2:
break
i = i +1
else:
print 'ELSE'
print 'The next statement'
....:
0
1
2
The next statement
имеется break
, есть break
, если он отличается от:
In [19]: i = 0
In [20]: while i < 5:
print i
if i == 2:
break
i = i +1
print 'ELSE'
print 'The next statement'
....:
0
1
2
ELSE
The next statement
return
, поскольку он делает тот же эффект для двух вышеприведенных случаев.
exception raise также не вызывает различий, потому что когда он поднимается, где следующий код будет выполнен, в обработчике исключений (кроме блока), код в else
или сразу после того, как предложение while
не будет выполнено.
Лучше использовать конструкцию «while: else:» в Python, если цикл «while» не выполняется, тогда выполняется оператор «else». То, как он работает сегодня, не имеет смысла, потому что вы можете использовать код ниже с теми же результатами ...
n = 5
while n != 0:
print n
n -= 1
print "what the..."
else
не будет выполнен, если вы покидаете цикл, используя ключевое слово break
или return
. В вашем примере print
будет запущен также, если цикл закончился в команде break
.
– Mariusz Pluciński
21 October 2013 в 17:43
Предложение else
выполняется, если вы выходите из блока в обычном режиме, нажав на условие цикла или опустив нижнюю часть блока try. Это not выполняется, если вы break
или return
вышли из блока или вызвали исключение. Он работает не только во время и за циклами, но и пытается блокировать.
Обычно вы находите его в местах, где обычно вы выходите из цикла раньше, а отключение конца цикла является неожиданным / необычным повод. Например, если вы просматриваете список, ищущий значение:
for value in values:
if value == 5:
print "Found it!"
break
else:
print "Nowhere to be found. :-("
В ответ на Is there a specific reason?
здесь представлено одно интересное приложение: разрыв нескольких уровней цикла.
Вот как это работает: внешний контур имеет разрыв в конце, поэтому он будет выполняется только один раз. Однако, если внутренний цикл завершает (не находит делителя), он достигает выражения else, и внешний разрыв никогда не достигается. Таким образом, разрыв во внутреннем цикле будет выходить из обеих петель, а не только из одного.
for k in [2, 3, 5, 7, 11, 13, 17, 25]:
for m in range(2, 10):
if k == m:
continue
print 'trying %s %% %s' % (k, m)
if k % m == 0:
print 'found a divisor: %d %% %d; breaking out of loop' % (k, m)
break
else:
continue
print 'breaking another level of loop'
break
else:
print 'no divisor could be found!'
Для циклов while
и for
оператор else
выполняется в конец, если не было использовано break
.
В большинстве случаев есть лучшие способы сделать это (обертывание его в функцию или создание исключения), но это работает!
Предложение else выполняется, когда условие while оценивается как false.
Оператор while используется для повторного выполнения, если выражение истинно:
while_stmt ::= "while" expression ":" suite ["else" ":" suite]
Это многократно проверяет выражение и, если оно истинно, выполняет первый набор; если выражение ложно (это может быть первый раз, когда оно проверено), набор
else
, если он присутствует, выполняется и цикл завершается.Оператор
blockquote>break
, выполняемый в первый набор завершает цикл без выполнения пакета предложенияelse
. Операторcontinue
, выполненный в первом пакете, пропускает остальную часть пакета и возвращается к тестированию выражения.
while {} something
except i>, чтоsomething
будет пропущен, если выbreak
вwhile
. – Daniel Kaplan 18 March 2015 в 22:48