TGViewer
Python: задачки и вопросы Python: задачки и вопросы @quiz_python · 6.93K subscribers
Post #4285 699
Адам Джонсон, участник Django Security Team:

«Несмотря на успешную генерацию случайного числа, функция всегда возвращает 𝟺 из−за 𝚛𝚎𝚝𝚞𝚛𝚗 в 𝚏𝚒𝚗𝚊𝚕𝚕𝚢−блоке, что делает 𝚝𝚛𝚢−блок фактически бесполезным.

𝙿𝙴𝙿 𝟽𝟼𝟻 ввёл 𝚂𝚢𝚗𝚝𝚊𝚡𝚆𝚊𝚛𝚗𝚒𝚗𝚐 на этот случай, объясняя, почему конструкции вроде 𝚛𝚎𝚝𝚞𝚛𝚗 / 𝚋𝚛𝚎𝚊𝚔 / 𝚌𝚘𝚗𝚝𝚒𝚗𝚞𝚎 в 𝚏𝚒𝚗𝚊𝚕𝚕𝚢 могут быть ошибкой — они затмевают поведение основного блока 𝚝𝚛𝚢, сбивая с толку разработчиков.


Способы решения проблемы

Перенести 𝚛𝚎𝚝𝚞𝚛𝚗 в блок 𝚎𝚡𝚌𝚎𝚙𝚝:

𝚍𝚎𝚏 𝚍𝟼() −> 𝚒𝚗𝚝:
𝚝𝚛𝚢:
𝚛𝚎𝚝𝚞𝚛𝚗 𝚛𝚊𝚗𝚍𝚘𝚖.𝚛𝚊𝚗𝚍𝚒𝚗𝚝(𝟷, 𝟼)
𝚎𝚡𝚌𝚎𝚙𝚝 𝙴𝚡𝚌𝚎𝚙𝚝𝚒𝚘𝚗:
# Фолбэк — здесь уместнее
𝚛𝚎𝚝𝚞𝚛𝚗 𝟺

Избавиться от 𝚝𝚛𝚢 / 𝚎𝚡𝚌𝚎𝚙𝚝, если исключения маловероятны:

𝚍𝚎𝚏 𝚍𝟼() −> 𝚒𝚗𝚝:
𝚛𝚎𝚝𝚞𝚛𝚗 𝚛𝚊𝚗𝚍𝚘𝚖.𝚛𝚊𝚗𝚍𝚒𝚗𝚝(𝟷, 𝟼)


Рекомендации автора и сообщества

🔘Избегайте 𝚛𝚎𝚝𝚞𝚛𝚗 и подобных конструкций в 𝚏𝚒𝚗𝚊𝚕𝚕𝚢;
🔘Переносите логику в 𝚎𝚡𝚌𝚎𝚙𝚝, если нужно "подстраховаться" при ошибке;
🔘Удаляйте 𝚏𝚒𝚗𝚊𝚕𝚕𝚢, если он не нужен, либо используйте 𝚠𝚒𝚝𝚑 и контекстные менеджеры;
🔘Разрешённое поведение линтеров — удаление таких конструкций и рефакторинг».
  • 👍 1
  • 👎 1
More from @quiz_python
  1. Sep 25, 2026Развёрнутое пояснение: 1. defaultdict(int) создаёт словарь, в котором фабрика int возвраща…
  2. Sep 25, 2026Post #4896
  3. Sep 25, 2026Развёрнутое пояснение: 1. Создаётся контекстная переменная request_id без значения по умол…
  4. Sep 25, 2026Post #4894
  5. Sep 24, 2026Развёрнутое пояснение: 1. Для класса Client строится порядок разрешения методов: Client, A…
  6. Sep 24, 2026Post #4892
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →