Возможно я не прав
Не прав в корне.
Вот смотри, есть у тебя стандартная библиотека, которую ты нещадно эксплуатируешь. Например, есть модуль datetime, который как не трудно догадаться, предоставляет множество удобных функций для работы с датой. Давай попробуем написать вот такой код
import datetime
d = datetime.datetime(2000, 14, 3)
print(d)
и мы увидим ошибку
Traceback (most recent call last):
File "<string>", line 4, in <module>
ValueError: month must be in 1..12
Так вот этот модуль кто-то написал, он не богом дан. И ты тоже можешь написать свою реализацию такого же точно модуля. Но товарищ, который реализовывал библиотечную функцию задался вопросом: “а как собственно должна себя вести функция, если её пользователь попробует создать дату с несуществующим в календаре месяцем?”. А никак она не должна себя дальше вести, она должна породить исключение, потому что это исключительная ситуация и недопустимое поведение. О чем позаботился разработчик и дал тебе внятное сообщение об ошибке. Если бы модуль datetime не обрабатывал исключительные ситуации, то вместо “month must be in 1..12” ты бы получил что-нибудь совершенно непонятно в строке 5909 непонятного тебе модуля, например какой-нибудь KeyError, и ты бы неделю пытал интернеты, а что собственно за фигня.
Если в твоей программе есть места, в которых может случится непредвиденное поведение, до программа должна сообщить об ошибке. Это и есть исключение. Если твоя программа читает XML-файл и создает какой-то отчет, что должно случиться, если в файле находятся неизвестные парсеру тэги? Очевидно, надо прервать парсинг и сообщить об этом в доступном виде.
Есть большая программа 10000 строк кода, много классов и т.д. Прогонять всю программу через дебагер - это очень такое себе.
Если часть программы написана на Си, то можно только пожелать удачи в дебаггенге.
Скажу еше проще, если ты в бак дизельного авто зальешь бензин, то лучше, если автомобиль откажется заводиться и покажет тебе значок на панели, чем если бы он завелся и расхреначил к чертям ТНВД.