[vtk-developers] Exceptions

Mark Asbach mark.asbach at post.rwth-aachen.de
Mon Mar 22 16:05:58 EST 2004


Hi VTK team,

unfortunately, I'm new to this list and didn't introduce myself, so 
this is what you should know: though just shortly finished with my 
diploma in electric engineering and computer science, I'm not new to 
programming or using VTK. As a student job, I worked for the virtual 
reality center Aachen as a student researcher on the ViSTA project (VR 
toolkit including VTK support).

> OK, Since this issue has been raised before let's take a couple 
> minutes to discuss it. I have heard good and bad things about 
> exceptions but I am not personally that familiar with them. So I'd 
> like for some folks who have experience using exceptions in a large 
> project to provide some input.

The ViSTA project (not including third party parts) is approximately 
the size of VTK and we discussed exceptions a lot. At the moment, 
exceptions are only used in some subparts of the toolkit.

 From what I would expect, introducing exceptions to VTK would be 
possible and a GOOD THING in the end - BUT there are some caveats.

At first: It's a no-hassle thing to introduce try/catch blocks at 
strategic filter base-classes, thanks to the modularity of VTK. In 
addition, providing an exception base-class that contains a default 
error-handler (that calls print() for example) would help a lot. 
However, extended review of CVS checkins might turn out to be necessary 
until the community becomes accustomed to a working coding-style 
regarding exceptions.

> (Good) Using exceptions allows for effectively testing many functions 
> in one try block. This I think is a great feature. If anything ran out 
> of memory in this try block then do this... is a great feature.

That is the point.

In addition, exceptions propagate through blocks that don't know of 
errors of inner methods, while traditional error handling requires that 
all parts of a call-chain know of every possible combination of errors 
and their remedies.

> (Good) Using exceptions allows for problems to be caught and handled 
> in a deep stack such as pipeline execution without having to put in a 
> lot of extra checks. I'm not 100% sure I buy this argument. Since a 
> filter's input can be a pipeline or just a plain data object I don't 
> see how the required testing is reduced. For many cases where a 
> pipeline could produce a bad data/metadata the same bad metadata could 
> be passed to the filter directly (without a pipeline). But I will 
> agree that it could help.

But it will vanish on its way through filters that don't know of the 
error handling.

> (Bad) There is a tendency to believe that throwing an exception makes 
> everything OK. Exception based error handling seems to frequently lack 
> appropriate try / catches.

Exceptions are NOT a replacement for traditional error handling. 
Exceptions are meant to replace abort() calls or error handling in 
really severe cases.

> My concern is that with exceptions most people would just throw the 
> exception and feel their job was done. I don't think this is a 
> technical problem with exceptions but rather a bad coding practice 
> where not enough effort is put into the try catch blocks that are 
> required to make exceptions useful.

Indeed.

> (the same problem exists with not checking the return value of malloc 
> etc, so it isn't limited to exceptions, but I think exceptions 
> exacerbate the problem)

I would guess, the opposite is true - given a good exception base-class 
and good examples on error handling are provided. It will be necessary 
to make absolutely clear, that exceptions are meant for exceptional 
(and severe) failures (memory exhaustion, broken pipes, etc.) - not for 
common and statistically occurring problems.

Greetings from Aachen,

Mark





More information about the vtk-developers mailing list