Исключения и отладка: вопросы для собеседования (часть 2)

try/except, raise, типы исключений, отладка с pdb — на собеседовании спрашивают, как обрабатывать ошибки и что происходит при необработанном исключении. Просят объяснить разницу между ValueError и TypeError, показать try/except/finally. Грамотная обработка ошибок отличает продакшн-код от скрипта в Jupyter.

Коллекции и структуры данныхГенераторы списков и встроенные функцииЦиклы и условияРабота с файлами: JSON и CSVФункции и аргументыИтераторы и генераторыNumPy: основыPandas и DataFrameСинтаксис и типы данных

Вопросы 610 из 20

6В ноутбуке аналитик написал `except Exception: pass`, чтобы «не падало». Почему это считается плохой практикой, если цель — быстро диагностировать проблемы?
AПотому что `pass` замедляет Python и делает код медленнее.
BПотому что `except Exception:` ловит только `KeyError`, а остальные ошибки всё равно упадут.
CПотому что так нельзя писать синтаксически: `pass` запрещён внутри `except`.
DПотому что ошибки скрываются, данные могут стать неверными, а traceback и первопричина теряются.
Ответ: Широкий перехват с «молчаливым» `pass` скрывает баги и ломает отладку.

Задача обработки исключений — не «чтобы не падало», а чтобы поведение было корректным и диагностируемым. `except Exception: pass` превращает реальные ошибки в тихие дефекты: метрики могут считаться неправильно, а вы не узнаете почему. Лучше ловить конкретные исключения и явно решать, что делать: логировать, ставить `None`, прекращать выполнение или поднимать `raise`.

7В начале traceback всегда есть строка `Traceback (most recent call last)`. Как она помогает читать стек вызовов?
ATraceback показывает цепочку вызовов от внешнего к внутреннему, и самый нижний фрейм обычно ближе всего к месту ошибки.
BЭто означает, что ошибка уже была обработана и можно игнорировать остаток traceback.
CЭто означает, что ошибка произошла в самом первом фрейме списка.
DЭто означает, что Python выводит traceback в случайном порядке.
Ответ: Traceback читают как стек вызовов: он показывает, какие функции привели к месту падения.

Строка `Traceback (most recent call last)` подсказывает: ниже будет список вызовов, а «последний» вызов (внизу) — обычно там, где исключение возникло. Понимание этой структуры помогает быстро найти первопричину, а не лечить симптомы в верхних слоях кода.

8Скрипт упал с `TypeError`, а данных много и непонятно, где именно проблема. Какой следующий шаг чаще всего самый эффективный для диагностики?
AСлучайно менять строки кода, пока ошибка не исчезнет.
BСразу обернуть весь код в `except Exception:` и продолжить расчёты.
CОткрыть traceback, перейти на указанную строку, проверить значения и типы переменных (например, через `type(x)`), и свести вход к минимальному воспроизводимому примеру.
DПерезапустить Python и повторить запуск без изменений — возможно, «само пройдёт».
Ответ: Traceback + проверка типов/значений на конкретной строке — самый быстрый путь к первопричине.

Отладка — это локализация: где упало, на каких данных, какие типы и значения участвовали. Traceback сразу указывает место, а проверка `type(...)` и вывод ключевых переменных помогает понять, почему операция недопустима. Минимальный воспроизводимый пример резко ускоряет исправление и снижает риск внести случайные ошибки.

9Вы пишете функцию `parse_age(age_text)`, которая должна принимать только неотрицательный возраст. Как лучше явно сообщить об ошибке входных данных, если пришло `-5`?
AВернуть строку `'error'`.
BВывести сообщение через `print` и продолжить работу.
CСделать `raise ValueError('age must be non-negative')`.
DСделать `raise KeyError('age')`.
Ответ: Для некорректного значения входных данных часто уместен `raise ValueError(...)`.

Когда входные данные нарушают ожидания (например, возраст отрицательный), полезно «сломать» выполнение явным исключением. `raise ValueError(...)` делает ошибку понятной, позволяет быстро отладить источник плохих данных и не продолжать расчёты с некорректными значениями.

10Вы получили traceback. В нём несколько строк вида `File '...', line ...`. Какой фрагмент обычно указывает на место, где исключение реально возникло?
AПервая строка traceback: `Traceback (most recent call last)`.
BСамая верхняя строка `File ... line ...` (в начале списка фреймов).
CЛюбая строка `File ... line ...`, они все равнозначны.
DСамая нижняя строка `File ... line ...` непосредственно перед строкой с типом исключения (например, `ValueError: ...`).
Ответ: В traceback место возникновения исключения чаще всего видно в нижнем фрейме стека.

Traceback показывает стек вызовов: от внешнего к внутреннему. Поэтому «внизу» обычно находится строка кода, где ошибка действительно произошла, а выше — цепочка вызовов, которая к ней привела. Это помогает быстро перейти к нужной строке и проверить значения/типы переменных рядом с ошибкой.

1234

Хотите тренировать интерактивно?

В приложении — таймер, прогресс, стрики и 1700+ вопросов по всем темам.

Тренировать в Telegram

Другие темы: Python

Коллекции и структуры данныхГенераторы списков и встроенные функцииЦиклы и условияРабота с файлами: JSON и CSVФункции и аргументыИтераторы и генераторыNumPy: основыPandas и DataFrameСинтаксис и типы данных