具体表现

函数里先读后写同一个变量,运行到读取那行就报局部变量在赋值前被引用。

先判断哪一层出错

函数体内出现赋值语句,Python 就把该名字当局部变量,之前的读取自然找不到定义。判断时先分清是 Python UnboundLocalError 本身的配置问题,还是上游调用、运行环境带进来的差异;前者改配置就能收口,后者要沿着请求链路一层层往上找,处理顺序不能颠倒。先在出问题的机器上复现一次,把报错原文和发生时间记下来,再对着日志定位。

操作步骤

  1. 确认变量是否需要在函数内修改
  2. 在函数首行声明 global
  3. 更稳妥的是用参数传入、返回值传出

对应的命令或配置片段如下,可直接复制:

count = 0
def add():
    global count
    count += 1
    return count
print(add(), add())

如果同一现象隔一段时间又出现,多半是某个定时任务或重启流程把配置覆盖回去了,顺手查一遍启动脚本。测试环境复现不了时,先对比两边的版本号和配置文件,差异往往就在被忽略的那几行里。

收尾检查

连续调用后计数按预期递增,且不再抛作用域错误。

作者 9823189