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

Python UnboundLocalError:变量'sbang'未赋值即引用问题排查

解决UnboundLocalError并实现数组代表数值加1保留前导零的功能

错误原因分析

你遇到的UnboundLocalError是因为空数组输入时,for循环完全不会执行,sbang变量从未被赋值,但后续代码直接引用了它。除此之外,你的代码还有两处逻辑问题:

  1. 循环内重复赋值sbang,完全冗余;
  2. 前导零的判断条件len(sbang) > 2完全不符合需求,会导致短数组的前导零丢失。

修复后的代码

def up_array(arr):
    # 空数组直接返回None
    if not arr:
        return None
    
    # 检查所有元素是否在0-9范围内
    for num in arr:
        if num < 0 or num > 9:
            return None
    
    # 将数组转为字符串,计算加1后的数值
    num_str = ''.join(map(str, arr))
    new_num_str = str(int(num_str) + 1)
    
    # 补前导零,确保结果长度与原数组一致
    target_length = len(arr)
    new_num_str_padded = new_num_str.zfill(target_length)
    
    # 转回数组返回
    return [int(c) for c in new_num_str_padded]

代码说明

  1. 空数组处理:空数组无法代表有效数值,直接返回None;
  2. 合法性检查:遍历数组,只要有元素小于0或大于9,立即返回None;
  3. 数值加1:将数组转为字符串后转整数加1,再转回字符串;
  4. 保留前导零:使用zfill(target_length)自动补前导零,确保结果数组长度和原数组一致(比如[0,1]加1后得到[0,2]);如果加1后位数增加(比如[9,9]→100),则直接返回更长的数组,符合数值进位逻辑。

测试案例验证

  • 输入[0,1] → 返回[0,2](保留前导零)
  • 输入[9,9] → 返回[1,0,0](进位后长度增加)
  • 输入[0,0,5] → 返回[0,0,6](保留多位前导零)
  • 输入[-1,2] → 返回None(非法负数)
  • 输入[10,1] → 返回None(元素超出0-9范围)
  • 输入[] → 返回None(空数组)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 16:21:53