tgoop.com/pyproglib/7119
Create:
Last Update:
Last Update:
🐍 Python 3.14+: новый SyntaxWarning про return в finally
В Python 3.14 появился свежий ворнинг, связанный с тем, что в блоках finally
нельзя (и не стоит) использовать:
— return
— break
— continue
Пример:
import random
def d6() -> int:
try:
return random.randint(1, 6)
finally:
return 4 # всегда перезапишет результат!
Теперь при запуске:
SyntaxWarning: 'return' in a 'finally' block
❗️ Проблема в том, что
return
внутри finally
переопределяет любое предыдущее значение — то есть в примере выше кубик всегда возвращает 4
, даже если генератор случайных чисел сработал корректно.Решение: вынести
return
из finally
, например:def d6() -> int:
try:
return random.randint(1, 6)
except Exception:
return 4 # fallback
А ещё лучше — просто:
def d6() -> int:
return random.randint(1, 6)
👉 Идея ворнинга (PEP 765) в том, чтобы спасти разработчиков от коварных багов и неожиданных перезаписей return/break/continue внутри
finally
.#буст