aosabook/500lines · error · NameError

name '%s' is not defined

Error message

name '%s' is not defined

What it means

Error "name '%s' is not defined" thrown in aosabook/500lines.

Source

Thrown at interpreter/code/byterun/pyvm2.py:306

        self.frame.push(const)

    def byte_POP_TOP(self):
        self.frame.pop()

    def byte_DUP_TOP(self):
        self.frame.push(self.frame.top())

    ## Names
    def byte_LOAD_NAME(self, name):
        frame = self.frame
        if name in frame.local_names:
            val = frame.local_names[name]
        elif name in frame.global_names:
            val = frame.global_names[name]
        elif name in frame.builtin_names:
            val = frame.builtin_names[name]
        else:
            raise NameError("name '%s' is not defined" % name)
        self.frame.push(val)

    def byte_STORE_NAME(self, name):
        self.frame.local_names[name] = self.frame.pop()

    def byte_DELETE_NAME(self, name):
        del self.frame.local_names[name]

    def byte_LOAD_FAST(self, name):
        if name in self.frame.local_names:
            val = self.frame.local_names[name]
        else:
            raise UnboundLocalError(
                "local variable '%s' referenced before assignment" % name
            )
        self.frame.push(val)

    def byte_STORE_FAST(self, name):

View on GitHub (pinned to fba689d101)

Solutions

  1. Define the name (assignment, def, class, or import) before loading it.
  2. Check for typos in the variable or function name being loaded.
  3. If the name is a builtin, make sure it exists in the running Python version; otherwise define it explicitly.

Example fix

x = 1
print(x)  # define x before LOAD_NAME/LOAD_GLOBAL references it

When it happens

Trigger: Thrown at interpreter/code/byterun/pyvm2.py:306 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of aosabook/500lines@fba689d101 (2026-08-13). Data as JSON: /api/errors/cd1b6e5e9650a8bf. Report an issue: GitHub.