Pitanje
📝 **Задатак:** Направите мали \`мемори_естиматор(редови, битес_пер_ров, оверхеад_пцт)\` који враћа укупну меморију у МБ (флоат, 2 децимале):
\`\`\`
укупно_бајтова = редови * бајтова_по_реду * (1 + прекомерни_пцт / 100)
мб = тотал_битес / 1_000_000 # децимални МБ — одговара конвенцији Прометхеус/Графана
повратна рунда (мб, 2)
\`\`\`
Тестирајте за 3 реалистичне размере: мали кеш меморије, панде ДатаФраме средње величине, велики скуп података Редис.
📋 Имплементирајте горњу функцију. Тестови се покрећу аутоматски.
💡 **Савет:** Поново прочитајте теорију ако запнете.
A Re-raising — wrapping a caught exception with `raise NewError() from e` loses the original traceback line numbers. B Bare `except: pass` — silently swallows everything including KeyboardInterrupt, SystemExit, and bugs you should fix. C Defining custom exception subclasses — every new exception type forces consumers to update their `except` tuples. D Catching at the boundary — handling errors in a middleware layer is too late for the caller to recover meaningfully.