SIDL exceptions are caught and thrown very much like normal Python exceptions are caught and thrown. Here is an example of a code catching exceptions from a call to getFib.
try:
fib.getFib(-1, 10, 10, 0)
except ExceptionTest.NegativeValueException.Exception:
(etype, eobj, etb) = sys.exc_info()
# eobj is the SIDL exception object
print eobj.getNote() # show the exception comment
print eobj.getTrace() # and traceback
Here is an example of a Python implementation function that throws an exception. The setNote method provides a useful error message, and the add method helps provide a multi-language traceback capability (provided each layer of the call stack calls add).
def getFib(self, n, max_depth, max_value, depth):
# sidl EXPECTED INCOMING TYPES
# ============================
# int n, max_depth, max_value, depth
#
# sidl EXPECTED RETURN VALUE(s)
# =============================
# int _return
# DO-NOT-DELETE splicer.begin(getFib)
if (n < 0):
ex = ExceptionTest.NegativeValueException.NegativeValueException()
ex.setNote("n negative")
ex.add(__name__, 0, "ExceptionTest.Fib.getFib")
raise ExceptionTest.NegativeValueException.Exception, ex
# numerous lines deleted
# DO-NOT-DELETE splicer.end(getFib)