On Mon, 01 Apr 2013 19:19:31 -0400, Jonathan M Davis <[email protected]> wrote:

On Monday, April 01, 2013 19:02:52 Steven Schveighoffer wrote:

In general, this is not enough. Imagine having an exception type for each
errno number. Someone may want that!

Obviously, there are limits. You don't want exceptions for absolutely every possible error condition under the sun, but a lot of errnos are quite rare and likely wouldn't be caught explicitly very often anyway. And something like FileNotFoundException _would_ be caught and handled differently from other file
exceptions often enough to merit its own exception IMHO. What's being
presented in this DIP is very sparse, and at least some portion of the kinds
should be represented by derived types in addition to the kinds.

I admit I haven't read the DIP yet, but I was responding to the general debate. I agree with Lars that exceptions that add no data are hard to justify.

But I also hate having to duplicate catch blocks. The issue is that class hierarchies are almost never expressive enough.

contrived example:

class MyException : Exception {}
class MySpecificException1 : MyException {}
class MySpecificException2 : MyException {}
class MySpecificException3 : MyException {}

try
{
   foo(); // can throw exception 1, 2, or 3 above
}
catch(MySpecificException1 ex)
{
   // code block a
}
catch(MySpecificException2 ex)
{
   // code block b
}

What if code block a and b are identical? What if the code is long and complex? Sure, I can put it in a function, but this seems superfluous and verbose -- exceptions are supposed to SIMPLIFY error handling, not make it more complex or awkward. Basically, catching exceptions is like having an if statement which has no boolean operators.

Even if I wanted to write one block, and just catch MyException, then check the type (and this isn't pretty either), it's not exactly what I want -- I will still catch Exception3. If this is the case, I'd rather just put an enum in MyException and things will be easier to read and write.

That being said, this is the mechanism we have, and the standard library shouldn't fight that. I will have to read the DIP before commenting further on that.

-Steve

Reply via email to