错误:UnboundLocalError: local variable 'xxx' referenced before assignment

# -*- coding:utf-8 -*-
def addr_to_lenth(jsonlist):
    t = len(jsonlist)
    i = 0
    typelist = list()
    while i < t :
        for j in range(i+1,t):
            if jsonlist[i]['起始地址'] + jsonlist[i]['长度'] == jsonlist[j]['起始地址'] and j-i-1 < 9:
                jsonlist[i]['长度'] += jsonlist[j]['长度']
                jsonlist[i]['采集数据类型'] = jsonlist[i]['采集数据类型'] + ',' + jsonlist[j]['采集数据类型']
                jsonlist[i]['id'] = jsonlist[i]['id'] + ','+ jsonlist[j]['id']
            else:
                break
        typelist.append(jsonlist[i])
        if i + 1 < j:
            i = j
        else:
            i += 1
    return typelist

def sort(jsonlist):#冒泡排序,按地址大小重新排序
    for i in range(len(jsonlist)-1):
        for j in range(len(jsonlist)-1-i):
            if jsonlist[j]['起始地址'] > jsonlist[j+1]['起始地址']:
                addrlist[j],addrlist[j+1] = addrlist[j+1],addrlist[j]
    return jsonlist

def add_lenth(jsonlist):
    for i in range(len(jsonlist)):
        if jsonlist[i]['采集数据类型'] not in ('int16', 'uint16'):
            jsonlist[i]['长度'] = 2
        else:
            jsonlist[i]['长度'] = 1
    return jsonlist

def tear_down(jsonlist):
    for item in jsonlist:
        for i in range(len(item['采集数据类型'])):
            pass

def run(jsonlist):
    addrlist_sort = sort(jsonlist)
    addlenth = add_lenth(addrlist_sort)
    t = addr_to_lenth(addlenth)
    return t

if __name__=="__main__":
    addrlist = [
        {"采集数据类型": "float",  "起始地址": 400012, "串口网口": "192.168.0.106:502", "id": "MID10001"},
        {"采集数据类型": "float",  "起始地址": 400114, "串口网口": "192.168.0.106:502", "id": "MID20002"},
        {"采集数据类型": "float",  "起始地址": 400014, "串口网口": "192.168.0.106:502", "id": "MID10002"},
        {"采集数据类型": "int16",  "起始地址": 400016, "串口网口": "192.168.0.106:502", "id": "MID10003"},
        {"采集数据类型": "float",  "起始地址": 400017, "串口网口": "192.168.0.106:502", "id": "MID10004"},
        {"采集数据类型": "int16",  "起始地址": 400019, "串口网口": "192.168.0.106:502", "id": "MID10005"},
        {"采集数据类型": "float",  "起始地址": 400020, "串口网口": "192.168.0.106:502", "id": "MID10006"},
        {"采集数据类型": "int16",  "起始地址": 400022, "串口网口": "192.168.0.106:502", "id": "MID10006"},
        {"采集数据类型": "int16",  "起始地址": 400023, "串口网口": "192.168.0.106:502", "id": "MID10006"},
        {"采集数据类型": "int16",  "起始地址": 400024, "串口网口": "192.168.0.106:502", "id": "MID10006"},
        {"采集数据类型": "float",  "起始地址": 400025, "串口网口": "192.168.0.106:502", "id": "MID10007"},
        {"采集数据类型": "float",  "起始地址": 400027, "串口网口": "192.168.0.106:502", "id": "MID10008"},
        {"采集数据类型": "float",  "起始地址": 400029, "串口网口": "192.168.0.106:502", "id": "MID10009"},
        {"采集数据类型": "float",  "起始地址": 400031, "串口网口": "192.168.0.106:502", "id": "MID10009"},
        {"采集数据类型": "float",  "起始地址": 400033, "串口网口": "192.168.0.106:502", "id": "MID10009"},
        {"采集数据类型": "float",  "起始地址": 400035, "串口网口": "192.168.0.106:502", "id": "MID10009"},
        {"采集数据类型": "float",  "起始地址": 400037, "串口网口": "192.168.0.106:502", "id": "MID10009"},
        {"采集数据类型": "int16",  "起始地址": 400039, "串口网口": "192.168.0.106:502", "id": "MID10009"},
        {"采集数据类型": "float",  "起始地址": 400040, "串口网口": "192.168.0.106:502", "id": "MID10010"}
    ]
    t  = run(addrlist)
    print t
程序手动运行该程序是不会报错的,但当其他程序调用时就会出现错误:line15:UnboundLocalError: local variable 'j' referenced before assignment
修改:
def addr_to_lenth(jsonlist):
    t = len(jsonlist)
    i = 0
    typelist = list()
    while i < t :
	s = 0
        for j in range(i+1,t):
            if jsonlist[i]['起始地址'] + jsonlist[i]['长度'] == jsonlist[j]['起始地址'] and j-i-1 < 9:
                jsonlist[i]['长度'] += jsonlist[j]['长度']
                jsonlist[i]['采集数据类型'] = jsonlist[i]['采集数据类型'] + ',' + jsonlist[j]['采集数据类型']
                jsonlist[i]['id'] = jsonlist[i]['id'] + ','+ jsonlist[j]['id']
		s = j
            else:
		s = j
                break
        typelist.append(jsonlist[i])
        if i + 1 < s:
            i = s
        else:
            i += 1
    return typelist

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值