Давай лучше пример напишу другой
function getByIndex(array, index){
unless(index in array) then throw RangeError 'Ошибка чтения с массива'
return array[index]
}
а дальше используем
item = getByIndex(array, 100)
и вот тут мы думаем, если наша программа предуусматривет что этовполне нормальное поведение что там МОЖЕТ И НЕ БЫТЬ ЭЛЕМЕНТА С ТАКИМ ИНДЕКСОМ, то мы перехватываем это исключение и поступаем так как система должна поступить в таком случае, если же предполагаем что элемнет с таким индексом там ДОЛЖЕН И ОБЯЗАН БЫТЬ, то мы не пишем try catch, а позвозяем ошибке если она появится всплыть и остановить всю программу.
например
try item = getByIndex(array, 100)
catch RangeError:error then item = defaultItem
бла бла бла
вот тут предполагается что мы ловим ТОЛЬКО RangeError который может бросить сгенерировать эта функция, и если там внутри у неё сгенерируются ошибки другого типа, например ошибки работы с памятью "MemoryError" то мы не должны их отлавливать потому что не знаем как они отработают.