У меня были "горячие споры" с коллегой по поводу его практики обертывания большинства своих функций в try / catch, но уловка имеет ТОЛЬКО "бросок", например
Private sub foo()
try
'Do something'
catch
throw 'And nothing else!'
End Try
End Sub
Моя мысль заключалась в том, чтобы даже не беспокоиться (при условии, что на этом этапе вам не нужно ничего делать) - исключение перейдет к следующему обработчику исключения в родительском элементе.
Единственный аргумент, который казался правдоподобным, заключался в том, что иногда исключения не перехватывались, и ваш код останавливался (в режиме отладки) с выделением текущей строки зеленым цветом ... и что это может быть связано с несколькими потоками? Наилучшая практика действительно устанавливает «обработчик исключений для каждого потока», но в основном мы работаем с однопоточным режимом.
Хорошо, что может быть полезно в режиме отладки, чтобы не всплывать внезапно родительскому члену (да, Джоэл!) - вы перейдете к оператору throw и сможете проверить свои локальные переменные. Но тогда ваш код будет «завален попытками / уловами / выбросами» (цитирую здесь другой тред)?
И какие накладные расходы будут связаны с добавлением повсюду try / catch / throws, если не возникает исключения (то есть следует избегать try / catch в узких циклах)?