Python新手遇local variable 'tools' referenced before assignment报错,咨询global keyword用法
错误原因与
global关键字工作原理说明 报错根因
你遇到的local variable 'tools' referenced before assignment是Python作用域规则下的典型报错:
- 如果你在函数内部对某个全局变量执行赋值操作,Python会默认将该变量识别为当前函数的局部变量,哪怕你已经在全局作用域定义过同名变量
- 你的关机逻辑对应的函数里,一定是先读取了
tools变量的值,之后才出现了给tools赋值的代码,且没有提前声明使用全局的tools,Python就会认为你在读取一个还没赋值的局部变量,抛出该错误
global关键字的作用
global是用来在函数内部声明变量归属的关键字,核心规则如下:
- 默认状态下,函数内部只能读取全局变量,不能直接修改全局变量的值,赋值操作会被识别为创建新的局部变量
- 如果需要在函数内部修改全局变量的值,必须在函数内部所有逻辑代码之前,用
global 变量名声明该变量来自全局作用域,后续对这个变量的读写都会直接操作全局的变量
修复方案
你可以按以下步骤修改代码:
- 找到处理输入为3(关机选项)对应的函数
- 在该函数的最开头(所有业务逻辑代码之前)添加声明:
global tools - 如果该函数内还修改了其他全局变量,也需要通过
global关键字一并声明
正反代码示例
错误写法示例:
# 全局定义tools变量 tools = ["重启", "注销", "关机"] def handle_shutdown(): # 先读取tools,但是函数下方有给tools赋值的操作,Python认为tools是局部变量,此时还未赋值,直接报错 if "关机" in tools: print("执行关机") # 给tools赋值,Python默认这里的tools是当前函数的局部变量 tools = []
正确写法示例:
tools = ["重启", "注销", "关机"] def handle_shutdown(): # 提前声明使用全局的tools变量 global tools if "关机" in tools: print("执行关机") tools = []
内容的提问来源于stack exchange,提问作者JazzBLues
相关产品推荐
相关产品推荐

