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

Python访问外层变量触发UnboundLocalError的原因求解

报错原因

Python的函数作用域有一条默认规则:如果函数内部存在对某个变量的赋值操作,Python会直接将该变量判定为当前函数的局部变量,不会优先去外层作用域匹配同名变量。

你代码里的main函数中存在player_name = input('Please input your name')的赋值逻辑,因此Python在预编译main函数时,就已经把player_name标记为main函数的局部变量。当执行到if not player_name这行判断逻辑时,局部作用域内的player_name还没有完成赋值,因此就抛出了UnboundLocalError。

修复方案

根据你的使用场景可以二选一:

  • 如果你需要修改外层定义的全局player_name变量,在函数开头用global关键字声明变量即可:
player_name = ''

def main():
    global player_name
    if not player_name:
        player_name = input('Please input your name')
    else:
        input('Your name is {}'.format(player_name))

main()
  • 如果你不需要修改外层全局变量,更推荐将变量作为参数传入函数,避免全局变量污染:
player_name = ''

def main(name):
    if not name:
        name = input('Please input your name')
    else:
        input('Your name is {}'.format(name))
    return name

player_name = main(player_name)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 23:36:05