You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

尝试本地化模块级同名变量触发UnboundLocalError的原因咨询

Why does a = a in a function trigger UnboundLocalError when there's a module-level a = 5?

Ah, this is a classic Python scope gotcha that trips up a lot of folks! Let's break down exactly what's happening here.

First, let's look at your code again:

# test.py
a = 5
def geta():
    a = a
    return a

When you call test.geta(), Python throws that UnboundLocalError because of how it resolves variable scopes. Here's the key rule you're hitting:

If you assign to a variable anywhere inside a function, Python treats that variable as local to the function for the entire scope of the function—even if you try to reference it before the assignment.

In your geta() function, the line a = a has an assignment to a. As soon as Python sees that assignment, it marks a as a local variable. But when it tries to evaluate the right-hand side a, it looks for the local a... which hasn't been created yet (since the assignment is what would create it). So you end up with an error: you're trying to use a local variable that doesn't exist yet.

Fixes for this issue

Here are a few ways to resolve this depending on what you're trying to do:

1. Declare a as global (if you want to use the module-level variable)

If your goal is to reference or modify the module's a variable, use the global keyword to tell Python to look in the global scope instead of creating a local variable:

a = 5
def geta():
    global a
    a = a  # Now this refers to the module-level a
    return a

2. Explicitly reference the module-level variable

If you don't want to use global, you can access the module's variable directly by referencing the module itself:

import sys
a = 5
def geta():
    module_a = sys.modules[__name__].a
    return module_a

This works because every Python module is an object, and sys.modules[__name__] gives you a reference to the current module.

3. Rename the local variable (cleanest option if you don't need to modify the global)

If you just want a local variable that starts with the value of the global a, give it a different name to avoid confusion:

a = 5
def geta():
    local_a = a  # Python looks in the global scope here since no assignment to `a` exists in the function
    return local_a

This is usually the best approach because it avoids scope ambiguity and makes your code easier to read.

内容的提问来源于stack exchange,提问作者Elkan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:43:23