Skip to main content

Exceptions

Exceptions signal failures during execution. When thrown, execution stops immediately and the error is returned to the caller.

Throwing Exceptions

Throw a String

endpoint Withdraw(amount U64):
if amount > balance:
throw "Insufficient balance"

Throw with Class

Classes can implement __except__ for custom error messages:

class Person:
field age U64

method __except__() -> (err String):
err = f"Underage: only {self.age} years"

endpoint VerifyAge(age U64):
memory person = Person{age: age}

if person.age < 18:
throw person // Calls __except__ automatically

Use Cases

Use exceptions for:

  • Invariant violations — conditions that should never occur
  • Permission checks — unauthorized access attempts
  • Validation failures — invalid input data
warning

Don't use exceptions for control flow. They immediately halt execution.

Catching Exceptions

try, catch, and finally are reserved keywords for future use. Exception handling is not yet implemented.

Error Types

When testing, errors appear in the format !<error_type>::<error_message>:

Error TypeWhen It Occurs
builtin.AccessErrorMap key doesn't exist, index out of bounds
builtin.ArithmeticErrorInteger overflow/underflow
builtin.RuntimeErrorGeneral runtime errors
userFrom throw "message"