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

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 变量名声明该变量来自全局作用域,后续对这个变量的读写都会直接操作全局的变量

修复方案

你可以按以下步骤修改代码:

  1. 找到处理输入为3(关机选项)对应的函数
  2. 在该函数的最开头(所有业务逻辑代码之前)添加声明:global tools
  3. 如果该函数内还修改了其他全局变量,也需要通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 18:15:05