Exceptions names list

Ali Çehreli acehreli at yahoo.com
Tue Nov 16 05:17:40 UTC 2021

On 11/15/21 3:00 PM, pascal111 wrote:
 > On Monday, 15 November 2021 at 22:44:35 UTC, Ali Çehreli wrote:
 >> On 11/15/21 2:28 PM, pascal111 wrote:
 >> > [...]
 >> "throw" statement
 >> > [...]
 >> Such a list is not very useful. Normally all we need is Exception and
 >> occasionally one or two other specific types.
 >> [...]
 > What if I expect more than one exception a function can do in "try"
 > block,

One benefit of exceptions is separating actual work from error handling. 
Code can be written as if everything will go well. If not, a higher 
level function may catch the exception and e.g. start over. So, no 
matter how many different kinds of exceptions may be thrown or no matter 
how complicated a function is, we just do the work:

void foo() {

Some higher level function may have a try-catch, which may catch a 
potential exception. Fine:

// An intermediate function that uses foo:
void zar() {

// A higher level function that uses the intermediate function:
void bar() {

   // Try until successful
   while (true) {
     try {

       // It worked! Let's leave.

     } catch (Exception ex) {
       // Something bad happened
       // Let's try again...

bar() catches all exceptions without caring what exact type they are. 
(In practice, for me, bar() is usually main(), the top level function.)

 > and I need more than one "catch" block after that, so I'll need
 > to define the exception, or you can turn around this with some way?

Well, if you *need* to handle a particular exception specially, then you 
have to have a specific catch clause for that exception. Otherwise, a 
single catch(Exception) is sufficient for most programs.

That is possible because all exceptions inherit from Exception:

class MyException : Exception {
   // ...

That definition means "MyException is an Exception", which allows 
MyException objects to be caught as Exceptions as well.

Exceptions are a useful tool but they are not suitable for all cases. 
Maybe you have such a case.


More information about the Digitalmars-d-learn mailing list