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
相关产品推荐
相关产品推荐

