{"record":{"id":"1bad461a73f64f98","repo":"aosabook/500lines","slug":"local-variable-s-referenced-before-assignment","errorCode":null,"errorMessage":"local variable '%s' referenced before assignment","messagePattern":"local variable '(.+?)' referenced before assignment","errorType":"exception","errorClass":"UnboundLocalError","httpStatus":null,"severity":"error","filePath":"interpreter/code/byterun/pyvm2.py","lineNumber":319,"sourceCode":"        elif name in frame.global_names:\n            val = frame.global_names[name]\n        elif name in frame.builtin_names:\n            val = frame.builtin_names[name]\n        else:\n            raise NameError(\"name '%s' is not defined\" % name)\n        self.frame.push(val)\n\n    def byte_STORE_NAME(self, name):\n        self.frame.local_names[name] = self.frame.pop()\n\n    def byte_DELETE_NAME(self, name):\n        del self.frame.local_names[name]\n\n    def byte_LOAD_FAST(self, name):\n        if name in self.frame.local_names:\n            val = self.frame.local_names[name]\n        else:\n            raise UnboundLocalError(\n                \"local variable '%s' referenced before assignment\" % name\n            )\n        self.frame.push(val)\n\n    def byte_STORE_FAST(self, name):\n        self.frame.local_names[name] = self.frame.pop()\n\n    def byte_LOAD_GLOBAL(self, name):\n        f = self.frame\n        if name in f.global_names:\n            val = f.global_names[name]\n        elif name in f.builtin_names:\n            val = f.builtin_names[name]\n        else:\n            raise NameError(\"global name '%s' is not defined\" % name)\n        f.push(val)\n\n    ## Operators","sourceCodeStart":301,"sourceCodeEnd":337,"githubUrl":"https://github.com/aosabook/500lines/blob/fba689d101eb5600f5c8f4d7fd79912498e950e2/interpreter/code/byterun/pyvm2.py#L301-L337","documentation":"Error \"local variable '%s' referenced before assignment\" thrown in aosabook/500lines.","triggerScenarios":"Thrown at interpreter/code/byterun/pyvm2.py:319 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Assign the local variable on every code path before it is read.","If the variable was meant to come from an outer scope, declare it global or nonlocal before assigning.","Reorder the code so the STORE_FAST happens before the LOAD_FAST."],"exampleFix":"def f():\n    x = 0  # initialize before any branch that might skip assignment\n    if cond:\n        x = 1\n    return x","handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"fba689d101eb5600f5c8f4d7fd79912498e950e2","analyzedAt":"2026-08-13T06:26:32.792Z","schemaVersion":2},"datasetVersion":"2026-08-13T09:17:06.757Z"}