2015-08-01 4 views
0

Мне известно о различии между std :: runtime_error и std :: logic_error.Должен ли я поймать std :: logic_error?

Итак, возник вопрос, следует ли мне поймать std :: logic_error или нет, поскольку эти исключения никогда не должны быть выброшены в первую очередь, если в коде нет ошибки. Имеются ли эти исключения только для развития?

ответ

1

Я бы поймал его, но в отладочных сборках либо выгружает стек вызовов, либо повторно бросает его [так что приложение выходит с «неперехваченным исключением»]. В сборках релизов ловец должен распечатать сообщение, которое дает подсказку о том, что произошло, и что пользователь должен сообщить о проблеме.

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