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

为什么Python代码定义变量时触发UnboundLocalError及int不可调用报错

报错原因分析

第一个UnboundLocalError报错

核心原因有两点:

  1. 你想要获取bomb在airstrikes中的索引,写法本身就不符合Python语法:列表元素的索引获取不能直接写index(bomb),正确的调用方式是airstrikes.index(bomb),就算没有后续的变量冲突,直接调用index()也会触发全局变量未定义的NameError。
  2. 函数内部后续定义了名为index的局部循环变量:for index in range(len(bomb)),Python解释器会预扫描整个函数作用域的变量定义,只要函数内存在对某个变量的赋值操作,就会把这个变量判定为局部变量。你在for index赋值语句之前调用index(bomb),就会触发「局部变量赋值前被引用」的错误。

第二个int object not callable报错

改写后的代码中,for index in range(len(bomb))已经将index赋值为整数类型的循环变量,后续你写index(bomb)相当于尝试把整数当做函数调用,整数类型没有实现可调用的__call__方法,自然会报「int对象不可调用」的错误。本质还是变量名冲突,同时你调用索引的语法本身有误。

正确实现方案

迭代时同时获取元素的索引和值直接用enumerate即可,既不会有变量冲突,也不需要手动调用index方法:

def alphabet_war(airstrikes):
    bombs = [[] for _ in range(len(airstrikes))]
    for bomb_index, bomb in enumerate(airstrikes):
        for pos, char in enumerate(bomb):
            if char == "*":
                bombs[bomb_index].append(pos)
    return bombs

内容的提问来源于stack exchange,提问作者Patrick Chong

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 05:48:02