{"record":{"id":"293c34e14cff2eb2","repo":"microsoft/semantic-kernel","slug":"module-name-has-no-attribute-name-293c34","errorCode":null,"errorMessage":"module {__name__} has no attribute {name}","messagePattern":"module (.+?) has no attribute (.+?)","errorType":"exception","errorClass":"AttributeError","httpStatus":null,"severity":"error","filePath":"python/semantic_kernel/connectors/memory.py","lineNumber":53,"sourceCode":"    \"QdrantStore\": \".qdrant\",\n    \"WeaviateCollection\": \".weaviate\",\n    \"WeaviateSettings\": \".weaviate\",\n    \"WeaviateStore\": \".weaviate\",\n    \"PineconeCollection\": \".pinecone\",\n    \"PineconeSettings\": \".pinecone\",\n    \"PineconeStore\": \".pinecone\",\n    \"SqlServerCollection\": \".sql_server\",\n    \"SqlServerStore\": \".sql_server\",\n    \"SqlSettings\": \".sql_server\",\n}\n\n\ndef __getattr__(name: str):\n    if name in _IMPORTS:\n        submod_name = _IMPORTS[name]\n        module = importlib.import_module(submod_name, package=__name__)\n        return getattr(module, name)\n    raise AttributeError(f\"module {__name__} has no attribute {name}\")\n\n\ndef __dir__():\n    return list(_IMPORTS.keys())\n","sourceCodeStart":35,"sourceCodeEnd":58,"githubUrl":"https://github.com/microsoft/semantic-kernel/blob/c028a0c7dc4f0814cdcbaba9d998f187a41197bf/python/semantic_kernel/connectors/memory.py#L35-L58","documentation":"Raised by the module-level `__getattr__` in `semantic_kernel/connectors/memory.py`, which implements lazy/deferred imports of memory connector classes via the `_IMPORTS` mapping. The requested attribute name is not present in `_IMPORTS`, so the module has no such attribute and Python surfaces a standard `AttributeError`. This is the canonical 'name not found' for the memory connector facade.","triggerScenarios":"Code does `from semantic_kernel.connectors import memory; memory.SomeClass` (or `from semantic_kernel.connectors.memory import SomeClass`) where `SomeClass` is misspelled, was renamed, was removed in a version upgrade, or is a class that never lived under this facade (e.g. legacy memory-store classes vs. the newer vector-store classes).","commonSituations":"Upgrading Semantic Kernel across major versions where connector class names changed (e.g. old `MemoryStore`-style names vs. the new `*Collection`/`*Store` vector-store names); typos like `PineconeColletion`; importing a class that lives in a subpackage not re-exported here; attempting to import an optional connector whose package isn't installed (the import inside `__getattr__` would then fail with ImportError, not this, so this specifically means the name isn't registered at all).","solutions":["Check the `_IMPORTS` dict in memory.py for the exact registered class name and fix the typo / use the current name.","If upgrading, consult the changelog/migration guide for renamed or removed memory connector classes.","For the legacy memory-store classes (under `connectors.memory_stores`), import them from their specific subpackage instead of the `memory` facade.","If the class should exist, verify you are on a Semantic Kernel version that ships it."],"exampleFix":"// before\nfrom semantic_kernel.connectors.memory import PineconCollection  # typo\n\n// after\nfrom semantic_kernel.connectors.memory import PineconeCollection","handlingStrategy":"validation","validationCode":"from semantic_kernel.connectors import memory as _mem\n\n_VALID = set(_mem._IMPORTS.keys())  # the lazily-exported names\n\ndef resolve(name: str):\n    if name not in _VALID:\n        raise AttributeError(\n        f\"{name!r} is not exported by connectors.memory. Valid: {sorted(_VALID)}\"\n    )\n    return getattr(_mem, name)","typeGuard":"def is_known_memory_export(name: str) -> bool:\n    from semantic_kernel.connectors.memory import _IMPORTS\n    return name in _IMPORTS","tryCatchPattern":"try:\n    from semantic_kernel.connectors.memory import PineconeCollection\nexcept AttributeError as e:\n    raise ImportError(\n        \"PineconeCollection not found; check spelling / SK version\"\n    ) from e","preventionTips":["Pin your Semantic Kernel version so the export surface is stable.","Read `_IMPORTS` keys once to enumerate available connector classes.","Keep a migration note when upgrading SK, as connector names have changed between major versions."],"tags":["import","lazy-loading","semantic-kernel","connector","attribute-access"],"backgroundTag":null,"analyzedSha":"c028a0c7dc4f0814cdcbaba9d998f187a41197bf","analyzedAt":"2026-08-13T13:48:05.040Z","schemaVersion":2},"datasetVersion":"2026-08-13T14:17:21.547Z"}