Re: non-catchable exception?
Thanks alot to all! My bad: I completely forgot that “catch (foo)” implies Exception foo, and not Throwable foo. OC On 12. 10. 2016, at 18:59, Jim White wrote: > The recommended way to have an exception that can't be caught except in > specifically intended places is to extend java.lang.Throwable (or if > appropriate to the use case, java.lang.Error). Those work just like > Exception except that they don't have to be declared in the method signatures > where they are throwable from and of course "catch (Exception ex) ..." > doesn't catch them since they are not subclasses of Exception. > > -- Jim > > > On Wed, Oct 12, 2016 at 9:38 AM, Dinko Srkoč wrote: > On 12 October 2016 at 18:27, Søren Berg Glasius wrote: > > This question should be asked in us...@groovy.apache.org > > > > And the answer to the question must be, no. But you could check if > > Well, strictly speaking, that's not quite true ;-) > > @groovy.transform.InheritConstructors > class MySpecialException extends Throwable {} > > try { > try { > throw new MySpecialException("foo") > } catch (ex) { > println "never got here!" > } > } catch (MySpecialException ex) { > println "did catch that $ex" > } > > but I don't think I would recommend that :-) > > Cheers, > Dinko > > > > > } catch (exception) { > > if(exception instance MySpecialException) throw exception > > println "bar caught $exception" > > } > > > > > > > > Best regards, > > Søren Berg Glasius > > > > Hedevej 1, Gl. Rye, 8680 Ry, Denmark > > Mobile: +45 40 44 91 88, Skype: sbglasius > > --- Press ESC once to quit - twice to save the changes. > > > > From: o...@ocs.cz > > Reply: dev@groovy.apache.org > > Date: 12. oktober 2016 at 18.24.20 > > To: dev@groovy.apache.org > > Subject: non-catchable exception? > > > > Hello there, > > > > is it possible to create an exception which will *not* be caught by a > > general handler, only by a specific one? So that e.g., the following code > > > > === > > class MySpecialException extends Exception { /* whatever magic needed here > > */ } > > ... > > def foo() { > > throw new MySpecialException() > > } > > def bar() { > > try { > > foo() > > } catch (exception) { > > println "bar caught $exception" > > } > > } > > static main(args) { > > try { > > bar() > > } catch (MySpecialException special) { > > println "special exception" > > } > > } > > === > > > > would print out "special exception" and *not* "bar caught..."? > > > > The reason is that the code I at the moment work with contains _lots_ of > > generic try/catch harnesses at different levels of code; they generally > > report the error caught and then go on processing the input. Now I would > > need a „special” exception which would not be caught by any of them, to > > abort the processing immediately. > > > > Adding a separate "catch (MySpecialException goup) { throw goup }" statement > > to each of all those already existing harnesses -- which would be, I guess, > > conceptually the right thing to do -- would be rather at the inconvenient > > side. > > > > Thanks, > > OC > > >
Re: non-catchable exception?
The recommended way to have an exception that can't be caught except in specifically intended places is to extend java.lang.Throwable (or if appropriate to the use case, java.lang.Error). Those work just like Exception except that they don't have to be declared in the method signatures where they are throwable from and of course "catch (Exception ex) ..." doesn't catch them since they are not subclasses of Exception. -- Jim On Wed, Oct 12, 2016 at 9:38 AM, Dinko Srkoč wrote: > On 12 October 2016 at 18:27, Søren Berg Glasius wrote: > > This question should be asked in us...@groovy.apache.org > > > > And the answer to the question must be, no. But you could check if > > Well, strictly speaking, that's not quite true ;-) > > @groovy.transform.InheritConstructors > class MySpecialException extends Throwable {} > > try { > try { > throw new MySpecialException("foo") > } catch (ex) { > println "never got here!" > } > } catch (MySpecialException ex) { > println "did catch that $ex" > } > > but I don't think I would recommend that :-) > > Cheers, > Dinko > > > > > } catch (exception) { > > if(exception instance MySpecialException) throw exception > > println "bar caught $exception" > > } > > > > > > > > Best regards, > > Søren Berg Glasius > > > > Hedevej 1, Gl. Rye, 8680 Ry, Denmark > > Mobile: +45 40 44 91 88, Skype: sbglasius > > --- Press ESC once to quit - twice to save the changes. > > > > From: o...@ocs.cz > > Reply: dev@groovy.apache.org > > Date: 12. oktober 2016 at 18.24.20 > > To: dev@groovy.apache.org > > Subject: non-catchable exception? > > > > Hello there, > > > > is it possible to create an exception which will *not* be caught by a > > general handler, only by a specific one? So that e.g., the following code > > > > === > > class MySpecialException extends Exception { /* whatever magic needed > here > > */ } > > ... > > def foo() { > > throw new MySpecialException() > > } > > def bar() { > > try { > > foo() > > } catch (exception) { > > println "bar caught $exception" > > } > > } > > static main(args) { > > try { > > bar() > > } catch (MySpecialException special) { > > println "special exception" > > } > > } > > === > > > > would print out "special exception" and *not* "bar caught..."? > > > > The reason is that the code I at the moment work with contains _lots_ of > > generic try/catch harnesses at different levels of code; they generally > > report the error caught and then go on processing the input. Now I would > > need a „special” exception which would not be caught by any of them, to > > abort the processing immediately. > > > > Adding a separate "catch (MySpecialException goup) { throw goup }" > statement > > to each of all those already existing harnesses -- which would be, I > guess, > > conceptually the right thing to do -- would be rather at the inconvenient > > side. > > > > Thanks, > > OC > > >
Re: non-catchable exception?
On 12 October 2016 at 18:27, Søren Berg Glasius wrote: > This question should be asked in us...@groovy.apache.org > > And the answer to the question must be, no. But you could check if Well, strictly speaking, that's not quite true ;-) @groovy.transform.InheritConstructors class MySpecialException extends Throwable {} try { try { throw new MySpecialException("foo") } catch (ex) { println "never got here!" } } catch (MySpecialException ex) { println "did catch that $ex" } but I don't think I would recommend that :-) Cheers, Dinko > > } catch (exception) { > if(exception instance MySpecialException) throw exception > println "bar caught $exception" > } > > > > Best regards, > Søren Berg Glasius > > Hedevej 1, Gl. Rye, 8680 Ry, Denmark > Mobile: +45 40 44 91 88, Skype: sbglasius > --- Press ESC once to quit - twice to save the changes. > > From: o...@ocs.cz > Reply: dev@groovy.apache.org > Date: 12. oktober 2016 at 18.24.20 > To: dev@groovy.apache.org > Subject: non-catchable exception? > > Hello there, > > is it possible to create an exception which will *not* be caught by a > general handler, only by a specific one? So that e.g., the following code > > === > class MySpecialException extends Exception { /* whatever magic needed here > */ } > ... > def foo() { > throw new MySpecialException() > } > def bar() { > try { > foo() > } catch (exception) { > println "bar caught $exception" > } > } > static main(args) { > try { > bar() > } catch (MySpecialException special) { > println "special exception" > } > } > === > > would print out "special exception" and *not* "bar caught..."? > > The reason is that the code I at the moment work with contains _lots_ of > generic try/catch harnesses at different levels of code; they generally > report the error caught and then go on processing the input. Now I would > need a „special” exception which would not be caught by any of them, to > abort the processing immediately. > > Adding a separate "catch (MySpecialException goup) { throw goup }" statement > to each of all those already existing harnesses -- which would be, I guess, > conceptually the right thing to do -- would be rather at the inconvenient > side. > > Thanks, > OC >
Re: non-catchable exception?
This question should be asked in us...@groovy.apache.org And the answer to the question must be, no. But you could check if } catch (exception) { if(exception instance MySpecialException) throw exception println "bar caught $exception" } Best regards, Søren Berg Glasius Hedevej 1, Gl. Rye, 8680 Ry, Denmark Mobile: +45 40 44 91 88, Skype: sbglasius --- Press ESC once to quit - twice to save the changes. From: o...@ocs.cz Reply: dev@groovy.apache.org Date: 12. oktober 2016 at 18.24.20 To: dev@groovy.apache.org Subject: non-catchable exception? Hello there, is it possible to create an exception which will *not* be caught by a general handler, only by a specific one? So that e.g., the following code === class MySpecialException extends Exception { /* whatever magic needed here */ } ... def foo() { throw new MySpecialException() } def bar() { try { foo() } catch (exception) { println "bar caught $exception" } } static main(args) { try { bar() } catch (MySpecialException special) { println "special exception" } } === would print out "special exception" and *not* "bar caught..."? The reason is that the code I at the moment work with contains _lots_ of generic try/catch harnesses at different levels of code; they generally report the error caught and then go on processing the input. Now I would need a „special” exception which would not be caught by any of them, to abort the processing immediately. Adding a separate "catch (MySpecialException goup) { throw goup }" statement to each of all those already existing harnesses -- which would be, I guess, conceptually the right thing to do -- would be rather at the inconvenient side. Thanks, OC