{"record":{"id":"a94ccaa9bdbc99f2","repo":"mission-peace/interview","slug":"task-does-not-exist","errorCode":null,"errorMessage":"task does not exist","messagePattern":"task does not exist","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"python/graph/priorityqueue.py","lineNumber":26,"sourceCode":"    \n    def __init__(self, is_min_heap):\n        self.pq = []\n        self.entry_finder = {}\n        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)","sourceCodeStart":8,"sourceCodeEnd":44,"githubUrl":"https://github.com/mission-peace/interview/blob/94be5deb0c0df30ade2a569cf3056b7cc1e012f4/python/graph/priorityqueue.py#L8-L44","documentation":"get_task_priority looks up the task in entry_finder and returns its stored priority; if the task was never added or was already removed/popped it raises ValueError(\"task does not exist\"). The priority queue only knows tasks tracked in its entry_finder dict.","triggerScenarios":"Calling get_task_priority(task) for a task not added via add_task, or one already removed via remove_task/pop_task.","commonSituations":"Querying a task after it was popped by a consumer, a typo'd or differently-typed task key (e.g. tuple vs string), or a stale reference held after queue processing.","solutions":["Check 'task in pq.entry_finder' before calling, or use dict .get with a default","Ensure the task is added via add_task before querying","Catch ValueError around the call for optional lookups"],"exampleFix":"// before\npriority = pq.get_task_priority(task)\n// after\npriority = pq.entry_finder[task][0] if task in pq.entry_finder else None","handlingStrategy":"validation","validationCode":"priority = pq.entry_finder[task][0] if task in pq.entry_finder else None","typeGuard":"def task_exists(pq, task):\n    return task in pq.entry_finder","tryCatchPattern":"try:\n    priority = pq.get_task_priority(task)\nexcept ValueError:\n    priority = None","preventionTips":["Only query priorities for tasks added via add_task and not yet popped","Keep task keys canonical (same type/value) across add and lookup","Use entry_finder membership checks instead of exception flow in hot paths"],"tags":["python","priority-queue","lookup-miss"],"backgroundTag":"record-not-found","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"}