try {} catch (Exception e) {} VS try {} catch (Exception e) {throw;} - Какая разница?

Я понял, что следующий код - анти-шаблон. Это правильно?

try
{
//something
} 
catch(Exception e)
{
//something
}

И почему лучше использовать

try
{
//something
} 
catch(Exception e)
{
 //something
 throw;
}

?

Я получил, что второй вариант используется для повторной генерации исключения (например, ведения журнала), но если мне нужно повторно выдать то же исключение, почему бы не использовать следующий код?

try
{
//something
} 
catch(Exception e)
{
 //something
 throw e;
}

person Yuliia Ashomok    schedule 26.06.2014    source источник
comment
stackoverflow.com/questions/1697216/   -  person Habib    schedule 26.06.2014
comment
Вы не сохраните трассировку стека (например, исходный номер строки), если вы throw e; вместо throw;. Новая трассировка стека показывает ваш пустой catch блок, что нежелательно. В любом случае пустой улов - плохая практика.   -  person Tim Schmelter    schedule 26.06.2014


Ответы (1)


Это повторно вызовет то же исключение и сохранит трассировку стека. Это упростит отладку.

catch(Exception e)
{
 //something
 throw;
}

Это приведет к повторной генерации исключения, но вы потеряете трассировку стека.

catch(Exception e)
{
 //something
 throw e;
}

Это автоматически проглотит исключение. Это нужно делать только тогда, когда вы перехватываете конкретное исключение, а не Exception. Как правило, для этого у вас должна быть веская причина.

try
{
//something
} 
catch(Exception e)
{
//something
}
person David Crowell    schedule 26.06.2014
comment
По сути, вы никогда не должны вызывать исключение, которое вы перехватили, по имени. Вы должны либо создать новое исключение (необязательно, включая перехваченное исключение как внутреннее исключение), либо повторно генерировать, используя throw без операнда. - person Xharlie; 26.06.2014
comment
Вы указали на разницу между примерами 2 и 3, которая уже рассматривается в другом вопросе, указанном в комментариях. Сперва спрашивает, в чем разница между 1 и 2, и спрашивает только о 2 и 3 в контексте попытки понять, почему 2 лучше, чем 1. - person starsplusplus; 26.06.2014