Многое из этого субъективно, но я лично считаю, что для кода обработки исключений лучше быть близко к месту возникновения ошибки, для удобства чтения и простоты отладки.Итак:
Компромисс здесь в том, что если я создам этот декоратор обработчика исключений, он станет довольно большим классом / функцией
Я бы рекомендовал против мистераФиксит класс.Когда возникает ошибка, и отладчик отправляет вас в Mr. Fixit, вам нужно немного пройти назад, прежде чем вы сможете понять, почему произошла ошибка, и что нужно исправить, чтобы она исчезла.Аналогично, незнакомый разработчик, читающий ваш код, теряет способность понимать только один небольшой фрагмент, относящийся к конкретной ошибке, и теперь должен работать с большим классом.Как добавленная проблема, многое из того, что есть в Mr. Fixit, не имеет отношения к одной ошибке, на которую они смотрят, и место, где происходит обработка ошибок, находится в совершенно другом месте.Особенно с декораторами, я чувствую, что вы жертвуете удобочитаемостью (особенно для кого-то, кто менее знаком с декораторами, чем вы), получая при этом немного.
Если написано с некоторой осторожностью, блоки try / catch не сильно нагружают производительность и делаютне загромождайте код слишком много.Я бы посоветовал ошибаться в сторону большего количества try / catch, при этом каждый try / catch близок к тому, что он обрабатывает, так что вы можете сразу увидеть, как обрабатываются ошибки для любого данного фрагмента кода (без необходимости переходить к другомуfile).
Если вы многократно повторяете код, вы можете либо выполнить рефакторинг, сделав код внутри catch метод, который можно вызывать многократно, либо сделав код внутри try, его собственным методом, который выполняет егообработка ошибок внутри своего тела.Если сомневаешься, будь проще.
Кроме того, я ненавижу быть нацистом, близким / не по теме, поэтому я не буду отмечать, но я думаю, что этот вопрос больше подходит для программистов @ SE (будучи абстрактнымфилософия / концептуальный вопрос), и вы можете получить лучшие ответы на этом сайте.