Устаревшее описание книги оператора Try-Except-finally - PullRequest
8 голосов
/ 23 сентября 2011

Я следую Apress, Beginning Python from Novice to Professional книге.Упоминается, что:

наконец.Вы можете использовать try / finally, если вам нужно убедиться, что какой-то код (например, код очистки) выполняется независимо от того, было ли вызвано исключение или нет.Этот код затем помещается в предложение finally.Обратите внимание, что вы не можете иметь и то и другое, кроме предложений и оператора finally в одном и том же операторе try, но вы можете поместить одно в другое.... и получается

Yesss
integer division or modulo by zero
Cleanup

Здесь я использовал except и finally в одном и том же сегменте try, не так ли?И код работает нормально, как и ожидалось.Я не совсем понимаю, о чем говорится в книге!

Кто-то, пожалуйста, уточните.Спасибо.

Ответы [ 4 ]

14 голосов
/ 23 сентября 2011

Это исправлено начиная с python 2.5 и четко указано в документации

Другими словами, ваша книга неверна / устарела

6 голосов
/ 23 сентября 2011

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

try:
    try:
        print 'something'
    except:
        print 'some weird error'
finally:
    print 'finally something

эквивалентно

try:
    print 'something'
except:
    print 'some weird error'
finally:
    print 'finally'
1 голос
/ 23 сентября 2011

Боюсь, эта книга может быть неправильной, так как Документация Python использует все три.Может быть, пришло время получить новую книгу?

0 голосов
/ 23 мая 2015

До Python 2.4 не было разрешено объединять в конечном итоге с оператором кроме или иначе.Но начиная с Python 2.5, как и другой объектно-ориентированный язык программирования, он поддерживает объединение, за исключением блоков и блока finally.Обратитесь к последней документации Python

...