Различие между использованием Throwable и Exception в выгоде попытки

После прочтения этой проблемы: https://github.com/git-lfs/git-lfs/issues/2481

Я связался с support@github.com, они решили мою проблему. Вот содержимое электронной почты:

Привет,

Спасибо, что написали, и я прошу прощения за беспокойство. Я только что восстановил использование Git LFS, и теперь он снова включен в вашей учетной записи.

Спасибо, Стив

blockquote>

Теперь я могу использовать git-lfs.

Connection to github.com closed by remote host. 6.0 MB/s
Uploading LFS objects:  51% (275/540), 5.5 GB | 5.2 MB/s

269
задан Seraphim's 21 September 2015 в 22:58
поделиться

4 ответа

Перехватывая Throwable , он включает вещи, которые подклассы Ошибка . Обычно вам не следует этого делать, за исключением, возможно, самого высокого уровня «поймать все» потока, в котором вы хотите регистрировать или иным образом обрабатывать абсолютно все, что может пойти не так. Это было бы более типично для приложения типа фреймворка (например, сервера приложений или фреймворка тестирования), где он может запускать неизвестный код и на него не должно влиять что-либо , что идет не так с этим кодом, а также насколько возможно.

225
ответ дан 23 November 2019 в 02:21
поделиться

Я видел, что люди используют Throwable для фиксации некоторых ошибок, которые могли бы произойти из-за инфра отказа / не доступность.

0
ответ дан 23 November 2019 в 02:21
поделиться

Thowable действительно улавливает все, даже ThreadDeath, который запускается по умолчанию для остановки потока из теперь устаревшего метода Thread.stop () . Таким образом, перехватывая Throwable , вы можете быть уверены, что никогда не покинете блок try, не пройдя хотя бы свой блок catch, но вы должны быть готовы также обработать OutOfMemoryError и ] InternalError или StackOverflowError .

Перехват Throwable наиболее полезен для циклов внешнего сервера, которые делегируют всевозможные запросы внешнему коду, но могут никогда не завершаться, чтобы поддерживать работу службы.

18
ответ дан 23 November 2019 в 02:21
поделиться

Первый ловит все подклассы Throwable (сюда входят Exception и Error), второй - все подклассы Exception.

Error является программно невосстановимым и обычно не перехватывается, кроме как для целей протоколирования (которое передает его снова). Исключение является программно восстанавливаемым. Его подкласс RuntimeException указывает на ошибку программирования и обычно также не перехватывается.

163
ответ дан 23 November 2019 в 02:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: