我找到了错误的原因,但我不知道如何解决

时间:2019-08-09 03:33:16

标签: python

“ wb”表中没有A2数据,即“客户代码”中的数据,因此请报告此错误。

我正在处理XLSX表,分析数据并根据示例重新分配存储的数据。根据对示例表的分析,现在处理的表没有示例数据。在这种情况下,我不处理它们,而仅存储现有数据。

#!/usr/bin/env python
#-*- coding: utf-8 -*-

import openpyxl 

wb = openpyxl.load_workbook('康之源药业.xlsx')
s1 = wb.active

def getdata(filename):
    data = []
    for col in s1.columns:
        '''取出每一列的值'''
        line = [cell.value for cell in col if cell.value != None]
        data.append(line)
    return data


def cachedata(data):
    '''数据储存'''
    for i in data:
        '''为空的列表不处理'''
        if len(i) != 0:
            #data.remove(i)
            if i[0] == '销售时间':
                a0 = i
            if i[0] == '生产厂家':
                a1 = i
            if i[0] == '客户代码':
                a2 = i 
            if i[0] == '客户名称':
                a3 = i
            if i[0] == '产品代码':
                a4 = i
            if i[0] == '产品名称':
                a5 = i
            if i[0] == '产品规格':
                a6 = i
            if i[0] == '单位':
                a7 = i
            if i[0] == '批号':
                a8 = i
            if i[0] == '数量':
                a9 = i
            if i[0] == '含税单价':
                a10 = i
            if i[0] == '商品名称':
                a11 = i
            if i[0] == '不含税单价':
                a12 = i
            if i[0] == '含税金额':
                a13 = i
            if i[0] == '不含税金额':
                a14 = i
            if i[0] == '出货类型':
                a15 = i
            if i[0] == '客户城市':
                a16 = i
            if i[0] == '客户地址':
                a17 = i
            if i[0] == '经销商发货单号':
                a18 = i
            if i[0] == '出货仓库':
                a19 = i
            if i[0] == '购进单位编码':
                a20 = i
            if i[0] == '一级商编码':
                a21 = i
            if i[0] == '一级商名称':
                a22 = i
    return a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20,a21,a22

if __name__ == '__main__':
    data = getdata(wb)
    cachedata = cachedata(data)
    a2 = cachedata[2]
    print(a2)

错误消息:

Traceback (most recent call last):
  File "C:\Users\Yang\Desktop\3.py", line 107, in <module>
    cachedata = cachedata(data)
  File "C:\Users\Yang\Desktop\3.py", line 76, in cachedata
    return a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20,a21,a22
UnboundLocalError: local variable 'a2' referenced before assignment

但是当我添加a2数据时,代码就起作用了。

2 个答案:

答案 0 :(得分:0)

尝试为cachedata中的变量添加默认值,以使它们仍然存在,无论是否为其分配了值:

def cachedata(data):
    a0 = a1 = a2 = a3 = a4 = a5 = a6 = a7 = a8 = a9 = a10 = a11 = a12 = a13 = a14 = \
    a15 = a16 = a17 = a18 = a19 = a20 = a21 = a22 = []
    '''数据储存'''
    for i in data:
        '''为空的列表不处理'''
        if len(i) != 0:
            #data.remove(i)
            if i[0] == '销售时间':
                a0 = i
            if i[0] == '生产厂家':
                a1 = i
            if i[0] == '客户代码':
                a2 = i 
            if i[0] == '客户名称':
                a3 = i
            if i[0] == '产品代码':
                a4 = i
            if i[0] == '产品名称':
                a5 = i
            if i[0] == '产品规格':
                a6 = i
            if i[0] == '单位':
                a7 = i
            if i[0] == '批号':
                a8 = i
            if i[0] == '数量':
                a9 = i
            if i[0] == '含税单价':
                a10 = i
            if i[0] == '商品名称':
                a11 = i
            if i[0] == '不含税单价':
                a12 = i
            if i[0] == '含税金额':
                a13 = i
            if i[0] == '不含税金额':
                a14 = i
            if i[0] == '出货类型':
                a15 = i
            if i[0] == '客户城市':
                a16 = i
            if i[0] == '客户地址':
                a17 = i
            if i[0] == '经销商发货单号':
                a18 = i
            if i[0] == '出货仓库':
                a19 = i
            if i[0] == '购进单位编码':
                a20 = i
            if i[0] == '一级商编码':
                a21 = i
            if i[0] == '一级商名称':
                a22 = i
    return a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20,a21,a22

答案 1 :(得分:0)

我推荐这种方式:

def cachedata(data):
    '''数据储存'''
    for i in data:
        '''为空的列表不处理'''
        if len(i) != 0:
            #data.remove(i)
            if i[0] == '销售时间':
                a0 = i
            if i[0] == '生产厂家':
                a1 = i
            if i[0] == '客户代码':
                a2 = i 
            if i[0] == '客户名称':
                a3 = i
            if i[0] == '产品代码':
                a4 = i
            if i[0] == '产品名称':
                a5 = i
            if i[0] == '产品规格':
                a6 = i
            if i[0] == '单位':
                a7 = i
            if i[0] == '批号':
                a8 = i
            if i[0] == '数量':
                a9 = i
            if i[0] == '含税单价':
                a10 = i
            if i[0] == '商品名称':
                a11 = i
            if i[0] == '不含税单价':
                a12 = i
            if i[0] == '含税金额':
                a13 = i
            if i[0] == '不含税金额':
                a14 = i
            if i[0] == '出货类型':
                a15 = i
            if i[0] == '客户城市':
                a16 = i
            if i[0] == '客户地址':
                a17 = i
            if i[0] == '经销商发货单号':
                a18 = i
            if i[0] == '出货仓库':
                a19 = i
            if i[0] == '购进单位编码':
                a20 = i
            if i[0] == '一级商编码':
                a21 = i
            if i[0] == '一级商名称':
                a22 = i
    local_ref = locals()
    return tuple(local_ref.get(a + str(i), []) for i in range(23))