Я просматривал python документы, чтобы улучшить свое ядро python, и я читал о ошибках и исключениях
В do c написано
Если предложение finally включает в себя оператор return, оператор возврата оператора finally будет выполняться до, а вместо оператора возврата в предложении try.
Этот пример также приводится ниже:
def bool_return():
try:
return True
finally:
return False
bool_return()
Теперь, глядя на этот пример, приведенное выше утверждение кажется достаточно прямым и справедливым, но если вы немного измените этот пример, чтобы он выглядел следующим образом:
def bool_return():
try:
return print("foo")
finally:
return False
bool_return()
Теперь, если вы запустите это, вы увидите, что foo
будет напечатано и False будет возвращено. Теперь do c говорит, что return оператора finally будет выполняться перед и вместо оператора try предложения return. Если так, то почему я вижу распечатку foo?
Я отладил этот фрагмент с помощью pycharm, и он показывает, что сначала выполняется оператор return предложения try, и выводится строка, а затем выводится None
возвращается из-за оператора return
, а оператор return в предложении finally будет выполнен позже, что является последним возвратом программы, поэтому функция отменяет предыдущее возвращение и возвращается False
.
Мой вопрос:
1) Почему c говорит, что, наконец, оператор возврата условия выполняется до ?
2) Почему c говорит, что предложение наконец оператор возврата выполняется вместо оператор возврата предложения try?
Я считаю, что оба утверждения противоположны тому, что происходит в действительности.
РЕДАКТИРОВАТЬ:
После прочтения ответа @ iBug теперь ясно, как оценивается print("foo")
, но None
не возвращается. По сути, сначала вычисляется выражение, а затем return
. Позже return False
в наконец выполняется. Что объясняет, почему мы получаем вывод, который мы сделали.
Тем не менее, я вижу, что return False
в окончании выполняется после return print("foo")
попытки.
Или согласно комментарию @ iBug, 10 RETURN_VALUE
полностью обойден?
EDIT
This теперь разрешено в документации, и теперь верно то, что будет возвращено. Однако, если вы sh знаете «как», прочитайте все комментарии и внимательно ответьте.