# Understand errors and refusals An error message is part of the public interaction. Start by identifying which operation failed: registration, graph compilation, resolution, or cleanup. Then compare its inputs and setup with the smallest relevant saved example. ## A useful debugging sequence 1. Keep the original exception type and message. 2. Identify the operation and the spell address involved. 3. Reduce the problem to the registrations and scope needed to reproduce it. 4. Check the source example's setup order and assertions. 5. Fix the invalid input or lifecycle assumption before adding a fallback. The error-vocabulary lesson demonstrates a missing resolution target and the public exception vocabulary. The double-bind lesson isolates registration behavior. The reading-errors lesson focuses on interpreting a refusal. These examples intentionally exercise failures. A caught refusal can be the expected outcome of a lesson; it is different from silently ignoring an error in application code. ## The workflow in code These are the core steps from the saved example. Use its complete linked script for all class definitions and setup. ```{literalinclude} ../downloads/01_beginner/06_error_vocabulary.py :language: python :pyobject: main :linenos: ``` ## Runnable examples - [Error vocabulary](../examples/beginner/06-error-vocabulary.md) — Beginner 06 - [Reading the errors](../examples/beginner/23-reading-the-errors.md) — Beginner 23 - [Double bind outcome](../examples/beginner/30-double-bind-outcome.md) — Beginner 30 [All beginner examples](../examples/beginner/index.md) · [Level contents](index.md) · [Full contents](../contents.md) [Canonical page source](https://github.com/Synaptic724/melder/blob/1211e838099a342c9dde48f064b1e772b6060e13/docs/beginner/errors.md)