exception处理尝试捕获内部catch

我最近遇到了一个程序员编写的代码,他在catch中有一个try-catch语句!

请原谅我无法粘贴实际代码,但他所做的与此类似:

try { //ABC Operation } catch (ArgumentException ae) { try { //XYZ Operation } catch (IndexOutOfRangeException ioe) { //Something } } 

我个人觉得这是我见过的最差的代码! 在1到10的范围内,你认为我应该多久去给他一点心思,还是我过度反应?

编辑:他在捕获中实际做了什么,他正在执行一些操作,这些操作可以/应该在初始尝试失败时完成。 我的问题是拥有干净的代码和可维护性。 将第一个catch的exception委托给另一个函数或调用函数就可以了,但是添加更多代码可能会或者可能不会将exception抛入第一个catch,这是我觉得不好的。 我试图避免多个堆叠的“if-loop”语句,我发现这同样糟糕。

为什么那么糟糕? 它在概念上与以下情况没有什么不同:

 void TrySomething() { try { } catch (ArgumentException) { HandleTrySomethingFailure(); } } void HandleTrySomethingFailure() { try { } catch (IndexOutOfRangeException) { } } 

在你去那里并给他一块脑之前(尝试顶叶,它特别令人反感),你究竟要对他说什么? 你会如何回答众所周知的“为什么?”

更具讽刺意味的是,当抖动内联这段代码时,它看起来就像你的例子。

-Oisin

这是一个案例:

 try{ //Dangerous Operation } catch (AnyException ae) { try { //Do rollback which can fail } catch (RollbackFailedException rfe) { //Log that } } finally { try { //close connection but it may fail too } catch (IOException ioe) { //Log that } } 

这和@ x0n说的差不多。 在尝试关闭资源或尝试解决另一个exception带来的情况时,您可能需要处理exception。

不知道代码是什么,这是不可能的。 但这样做并不罕见

例如,如果您必须在处理exception时清理资源,那么清理代码本身可能具有抛出exception的能力。