异常处理尝试catch内部捕获
问题内容:
最近,我遇到了一位程序员的代码,其中他在catch中有一条try-catch语句!
请原谅我无法粘贴实际代码,但是他所做的与以下内容类似:
try
{
//ABC Operation
}
catch (ArgumentException ae)
{
try
{
//XYZ Operation
}
catch (IndexOutOfRangeException ioe)
{
//Something
}
}
我个人认为这是我见过的最差的代码!以1到10的比例,您认为我应该多久才能动一下脑子,还是我反应过度?
编辑:他实际上在抓捕中所做的事情,他正在执行一些操作,这些操作在初始尝试失败时可以/应该执行。我的问题是拥有干净的代码和可维护性。将异常从第一个catch委派到其他函数或调用函数可以,但是添加更多可能会或可能不会在第一个catch中抛出异常的代码,我觉得不好。我尝试避免使用多个堆叠的“
if-loop”语句,但我发现这同样不好。
问题答案:
为什么这么糟?在概念上与以下内容没有什么不同:
void TrySomething() {
try {
} catch (ArgumentException) {
HandleTrySomethingFailure();
}
}
void HandleTrySomethingFailure() {
try {
} catch (IndexOutOfRangeException) {
}
}
在您去那里之前,请给他一个大脑(尝试顶叶,这特别令人反感),您对他说什么呢?您将如何回答谚语“为什么”?
更具有讽刺意味的是,当抖动内联该代码时,它将看起来完全像您的示例。
-Oisin