{"record":{"id":"f64a9d414c8b5abc","repo":"mission-peace/interview","slug":"key-already-exists","errorCode":null,"errorMessage":"Key already exists","messagePattern":"Key already exists","errorType":"exception","errorClass":"KeyError","httpStatus":null,"severity":"error","filePath":"python/graph/priorityqueue.py","lineNumber":30,"sourceCode":"        if(is_min_heap is True):\n            self.mul = 1\n        else :\n            self.mul = -1\n         \n    def contains_task(self, task):\n        if task in self.entry_finder:\n            return True\n        else:\n            return False\n\n    def get_task_priority(self, task):\n        if task in self.entry_finder:\n            return (self.entry_finder[task])[0]\n        raise ValueError(\"task does not exist\")\n        \n    def add_task(self, priority, task):\n        if task in self.entry_finder:\n            raise KeyError(\"Key already exists\")\n        entry = [self.mul*priority, False, task]\n        self.entry_finder[task] = entry\n        heappush(self.pq, entry)\n\n    def change_task_priority(self, priority, task):\n        if task not in self.entry_finder:\n            raise KeyError(\"Task not found\")\n        self.remove_task(task)\n        entry = [self.mul*priority, False, task]\n        self.entry_finder[task] = entry\n        heappush(self.pq, entry)\n \n    def remove_task(self, task):\n        entry = self.entry_finder.pop(task)\n        entry[1] = True\n\n    def pop_task(self):\n        while self.pq:","sourceCodeStart":12,"sourceCodeEnd":48,"githubUrl":"https://github.com/mission-peace/interview/blob/94be5deb0c0df30ade2a569cf3056b7cc1e012f4/python/graph/priorityqueue.py#L12-L48","documentation":"add_task raises KeyError(\"Key already exists\") when the task is already present in entry_finder. Tasks must be unique in this priority queue; to change an existing task's priority use change_task_priority instead of add_task.","triggerScenarios":"Calling add_task(priority, task) twice with the same task without removing it in between.","commonSituations":"Re-enqueueing a retried job without remove_task, re-running a seeding function on an existing queue, or using add_task where change_task_priority was intended.","solutions":["Use change_task_priority(priority, task) when the task may already exist","Call remove_task(task) before add_task to replace the entry","Guard with 'if task not in pq.entry_finder: pq.add_task(...)'"],"exampleFix":"// before\npq.add_task(priority, task)\n// after\nif task in pq.entry_finder:\n    pq.change_task_priority(priority, task)\nelse:\n    pq.add_task(priority, task)","handlingStrategy":"try-catch","validationCode":"if task not in pq.entry_finder:\n    pq.add_task(priority, task)\nelse:\n    pq.change_task_priority(priority, task)","typeGuard":"def can_add(pq, task):\n    return task not in pq.entry_finder","tryCatchPattern":"try:\n    pq.add_task(priority, task)\nexcept KeyError:\n    pq.change_task_priority(priority, task)","preventionTips":["Use add-or-update helper wrappers instead of raw add_task","remove_task before re-adding in retry scenarios","Keep one queue instance per task namespace to avoid cross-queue duplicates"],"tags":["python","priority-queue","duplicate-key"],"backgroundTag":"file-already-exists","analyzedSha":"94be5deb0c0df30ade2a569cf3056b7cc1e012f4","analyzedAt":"2026-09-08T13:27:05.954Z","contentChangedAt":"2026-09-08T13:27:05.954Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}