{"record":{"id":"9ca5d643c8c3ffdd","repo":"facebookresearch/detectron2","slug":"attribute-does-not-exist-in-the-metadata-of-d","errorCode":null,"errorMessage":"Attribute '{}' does not exist in the metadata of dataset '{}'. Available keys are {}.","messagePattern":"Attribute '(.+?)' does not exist in the metadata of dataset '(.+?)'\\. Available keys are (.+?)\\.","errorType":"exception","errorClass":"AttributeError","httpStatus":null,"severity":"error","filePath":"detectron2/data/catalog.py","lineNumber":126,"sourceCode":"\n    _RENAMED = {\n        \"class_names\": \"thing_classes\",\n        \"dataset_id_to_contiguous_id\": \"thing_dataset_id_to_contiguous_id\",\n        \"stuff_class_names\": \"stuff_classes\",\n    }\n\n    def __getattr__(self, key):\n        if key in self._RENAMED:\n            log_first_n(\n                logging.WARNING,\n                \"Metadata '{}' was renamed to '{}'!\".format(key, self._RENAMED[key]),\n                n=10,\n            )\n            return getattr(self, self._RENAMED[key])\n\n        # \"name\" exists in every metadata\n        if len(self.__dict__) > 1:\n            raise AttributeError(\n                \"Attribute '{}' does not exist in the metadata of dataset '{}'. Available \"\n                \"keys are {}.\".format(key, self.name, str(self.__dict__.keys()))\n            )\n        else:\n            raise AttributeError(\n                f\"Attribute '{key}' does not exist in the metadata of dataset '{self.name}': \"\n                \"metadata is empty.\"\n            )\n\n    def __setattr__(self, key, val):\n        if key in self._RENAMED:\n            log_first_n(\n                logging.WARNING,\n                \"Metadata '{}' was renamed to '{}'!\".format(key, self._RENAMED[key]),\n                n=10,\n            )\n            setattr(self, self._RENAMED[key], val)\n","sourceCodeStart":108,"sourceCodeEnd":144,"githubUrl":"https://github.com/facebookresearch/detectron2/blob/a2f4a8771ab77e8411c26b27f24f9489a28a2453/detectron2/data/catalog.py#L108-L144","documentation":"MetadataCatalog attributes are accessed via __getattr__; when the requested key isn't set (and isn't a renamed legacy key), this AttributeError is raised listing the dataset name and the currently available metadata keys. The 'len(self.__dict__) > 1' branch means metadata exists but is missing this key.","triggerScenarios":"Accessing MetadataCatalog.get('my_dataset').thing_colors when only 'thing_classes' was set; reading metadata attributes a builtin dataset version doesn't populate.","commonSituations":"Custom datasets registered without setting all metadata downstream code reads (e.g. evaluator needs thing_classes/thing_colors); code assuming COCO-style metadata exists for any dataset; version changes adding new required metadata.","solutions":["Register the missing key: MetadataCatalog.get(name).thing_colors = [...] or set it in register call kwargs","Check the printed available keys and adapt your code to not require the missing one","For standard datasets, ensure you used builtin registration (import detectron2.data.datasets.builtin)"],"exampleFix":"# before\nmeta = MetadataCatalog.get(\"my_train\")\ncolors = meta.thing_colors  # AttributeError\n# after\nMetadataCatalog.get(\"my_train\").thing_colors = [(255,0,0),(0,255,0)]\ncolors = MetadataCatalog.get(\"my_train\").thing_colors","handlingStrategy":"type-guard","validationCode":"from detectron2.data import MetadataCatalog\nmeta = MetadataCatalog.get(name)\nassert hasattr(meta, 'thing_colors'), f\"missing thing_colors for {name}\"","typeGuard":"def metadata_has(meta, key: str) -> bool:\n    return getattr(meta, key, None) is not None","tryCatchPattern":"try:\n    colors = meta.thing_colors\nexcept AttributeError:\n    colors = [(i * 37 % 255, i * 91 % 255, i * 53 % 255) for i in range(len(meta.thing_classes))]","preventionTips":["Set all metadata keys downstream code reads at registration time","Use getattr(meta, 'key', default) for optional metadata","Review evaluator requirements when adding new datasets"],"tags":["metadata","registry","detectron2"],"backgroundTag":"missing-dataset-metadata","analyzedSha":"a2f4a8771ab77e8411c26b27f24f9489a28a2453","analyzedAt":"2026-08-27T12:08:21.260Z","schemaVersion":2},"datasetVersion":"2026-08-27T13:17:12.746Z"}