agentscope-ai/agentscope · error · AttributeError

{key}

Error message

{key}

What it means

A dict-mixin class in agentscope exposes attribute-style access (obj.key) backed by dict.__getitem__. When the key is missing, the KeyError is converted to AttributeError with the key as the message, matching Python's protocol for __getattr__. This means typos in attribute access surface as AttributeError, not KeyError.

Source

Thrown at src/agentscope/_utils/_mixin.py:28

    def __getattr__(self, key: str) -> object:
        """Get a dictionary item through attribute-style access.

        Args:
            key (`str`):
                The requested attribute name.

        Returns:
            `object`:
                The value stored under ``key``.

        Raises:
            `AttributeError`:
                If the dictionary does not contain ``key``.
        """
        try:
            return dict.__getitem__(self, key)
        except KeyError as error:
            raise AttributeError(key) from error

View on GitHub (pinned to e90f1c7592)

Solutions

  1. Use the checked form: value = obj.get('key', default) or 'key' in obj before attribute access
  2. Verify the key exists in the dict before access (list(obj.keys()))
  3. Check the agentscope changelog if the attribute was renamed in a version upgrade

Example fix

# before
val = block.meta  # AttributeError if 'meta' absent

# after
val = block.get("meta")  # returns None or default
# or
val = block.meta if "meta" in block else None
Defensive patterns

Strategy: validation

Validate before calling

if "key" in obj:
    value = obj.key
else:
    value = default

Type guard

from typing import Any, TypeGuard

def has_key(obj: Any, key: str) -> bool:
    return isinstance(obj, dict) and key in obj

Try / catch

try:
    value = obj.some_key
except AttributeError:
    value = obj.get("some_key", default)

Prevention

When it happens

Trigger: Accessing obj.some_key as an attribute when the dict does not contain that key, e.g. msg.metadata.nonexistent or config.missing_field on classes using this mixin.

Common situations: Accessing fields that were never set (optional metadata), renaming of keys between agentscope versions, or mixing dict access (obj['key']) semantics with attribute access expectations.

Related errors


AI-assisted analysis of agentscope-ai/agentscope@e90f1c7592 (2026-08-28). Data as JSON: /api/errors/e9fc5322f68524bd. Report an issue: GitHub.