Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why is it better to throw an exception rather than return an error code?

Legacy error handling tends to follow the method that all functions return a code depending on success/failure. You would check this code and handle (if an error) appropriately.

Modern programming languages however follow the exception model, where if something exceptional happens that cannot be handled properly an exception gets thrown - which keeps bubbling up until its handled.

My question is why have we moved towards the exception model? What are the reasons behind this? Why is it better?

Explanations/links would be much appreciated.

like image 681
m.edmondson Avatar asked Jan 12 '11 16:01

m.edmondson


People also ask

Why is throwing an exception better than returning an error value?

Return codes are more brittle The error is ignored when "returned", and will possibly explode later (i.e. a NULL pointer). The same problem won't happen with exception. The error won't be ignored.

What is better to throw exceptions or return error codes?

An application that uses exceptions is more robust than an application that uses return codes. An application that uses exceptions can also give the cleanest code, since return codes don't have to be checked after every call.

Why are exceptions better than error codes?

Error codes are safer for well-reviewed code Error codes mean that you must carefully look at function calls to see if the programmer handled the possible errors. Exceptions mean that you must imagine what happens if an exception is thrown anywhere in the flow.

Is it better to throw exception?

The general guideline is that your application should not throw more than 1000 exceptions a second. When you throw exceptions for exceptional scenario's performance will in most cases not be a problem. @Jodrell: Exactly! Error codes are useful in languages that don't have exception handling.


2 Answers

I've written about this at length: Exceptions vs. status returns, but briefly:

  1. Exceptions leaves your code clean of all the checks necessary when testing status returns on every call,
  2. Exceptions let you use the return value of functions for actual values,
  3. Exceptions can carry more information than a status return can,
  4. Most importantly: exceptions can't be ignored through inaction, while status returns can.

To expand on the last point: if you forget to do what you should be doing with status returns, you ignore errors. If you forget to do what you should be doing with exceptions, the exception bubbles up to the outer layer of the software where it becomes visible.

like image 58
Ned Batchelder Avatar answered Oct 20 '22 07:10

Ned Batchelder


Here are a couple of reasons

  • Ignoring an exception requires action by the developer while ignoring a bad returning value requires exactly 0 action. This, in theory, makes it more likely a developer will handle an error vs. ignoring it or not even realizing it was happening.
  • Provides a cleaner separation between the point of an error and the handling. It doesn't force manual propagation of the error at every point in between.
  • Exceptions can a larger and richer information payload than a simple error code. There are ways to do this with error codes but it's more of an afterthought and is a bit cumbersome.
like image 35
JaredPar Avatar answered Oct 20 '22 07:10

JaredPar