Exceptions/Catch an exception thrown in a nested call

From Rosetta Code
Revision as of 05:31, 7 March 2009 by rosettacode>Paddy3118 (New page: {{task}} Show how to create a user-defined exception and show how to catch an exception raised from several nested calls away. # Create two user-defined exceptions, U0 and U1. # Have fun...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Task
Exceptions/Catch an exception thrown in a nested call
You are encouraged to solve this task according to the task description, using any language you may know.

Show how to create a user-defined exception and show how to catch an exception raised from several nested calls away.

  1. Create two user-defined exceptions, U0 and U1.
  2. Have function foo call function bar which then calls function baz.
  3. Arrange for function baz is to raise, or throw exception U0 on its first call, then exception U1 on its second.
  4. Function foo is to catch only exception U0, not U1.

Show/describe what happens when the program is run.

Template:Python

There is no extra syntax to add to functions and/or methods such as bar, to say what exceptions they may raise or pass through them: <lang python>class U0(Exception): pass class U1(Exception): pass

def foo():

   for i in range(2):
       try:
           bar(i)
       except U0:
           print "Function foo caught exception U0"

def bar(i):

   baz(i) # Nest those calls

def baz(i):

   raise U1 if i else U0

foo()</lang> Sample output: <lang python>Function foo caught exception U0

Traceback (most recent call last):

 File "C:/Paddy3118/Exceptions_Through_Nested_Calls.py", line 17, in <module>
   foo()
 File "C:/Paddy3118/Exceptions_Through_Nested_Calls.py", line 7, in foo
   bar(i)
 File "C:/Paddy3118/Exceptions_Through_Nested_Calls.py", line 12, in bar
   baz(i) # Nest those calls
 File "C:/Paddy3118/Exceptions_Through_Nested_Calls.py", line 15, in baz
   raise U1 if i else U0

U1</lang> The first line of the output is generated from catching the U0 exception in function foo.

Uncaught exceptions give information showing where the exception originated through the nested function calls together with the name of the uncaught exception, (U1) to stderr, then quit the running program.