В 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.🐸 Библиотека питониста
#буст
