Skip to content

CircularReferenceError

Raised when self-references create a circular dependency.

When It's Raised

  • Direct circular reference: a: ${a}
  • Indirect circular reference: a: ${b} and b: ${a}
  • Longer cycles: a: ${b}, b: ${c}, c: ${a}

Example

from holoconf import Config, CircularReferenceError

config = Config.loads("""
a: ${b}
b: ${c}
c: ${a}
""")

try:
    value = config.get("a")
except CircularReferenceError as e:
    print(f"Circular reference: {e}")
    # Circular reference: Circular reference detected at path 'a'

Prevention

Ensure your self-references form a directed acyclic graph (DAG):

# Good - no cycles
defaults:
  timeout: 30

database:
  timeout: ${defaults.timeout}

cache:
  timeout: ${defaults.timeout}
# Bad - cycle between a and b
a: ${b}
b: ${a}

Class Reference

Bases: HoloconfError

Circular reference detected in configuration.

Raised when a circular reference is detected during value resolution. This occurs when interpolations form a cycle, such as a value referencing itself or indirect circular dependencies.