Occasionally an error occurs that is not expected:: A subscript of a List is out-of-bounds. An attempt to divide by zero. A Hash is missing a key.

In many cases, the predefined Option and Result enums are preferable to raising an exception. However, error classes exist for cases where Option and Result are not suitable.

The base class of all errors is Exception. Only classes that inherit from Exception can be raised. The Exception class include two members: a String message, and a List[String] traceback.

When an exception is raised, the traceback field of it is replaced with the current call stack.

Information about exception capture is available in the try section of blocks located here.


The exception hierarchy is as follows:

  • DivisionByZero: Attempt to divide or modulo by zero.

  • Exception: Base class of all raiseable exceptions.

  • IndexError: Out-of-bounds access of a container (such as List).

  • IOError: Incorrect usage of a File.

  • KeyError: Attempt to read a value from a Hash that does not exist.

  • RuntimeError: Bad runtime action such as modifying a hash during iteration or exceeding the recursion limit.

  • ValueError: Invalid or unreasonable value provided.

Any of these exceptions can be inherited to create a custom exception. The try section in the blocks area details how try/except works, and more on raising custom exceptions.