全局列表对象被视为int

时间:2018-09-25 04:18:41

标签: python python-3.x

我在类外定义了一些列表对象,如下所示,

time_offset=[datetime.datetime(2018,9,25,9,15,0)]*len(symbol_list)
volume_offset=[0]*len(symbol_list)
timer_var=[datetime.datetime.now()]*len(symbol_list)
green_status=[0]*len(symbol_list)

我将以下方法编写在类中。

def updateWindow(self,stock,price_type):
        global time_offset
        global pass_if
        global green_status
        global red_status
        global green_count
        global red_count
        idx=int(company_index_pair[stock])
        if (datetime.datetime.now().minute)%5==0 and price_type==11 and pass_if[idx]==True:
            pass_if[idx]=False
            time_offset[idx]=datetime.datetime.now()
            volume_offset[idx]=volume_list[idx]
        if (datetime.datetime.now().minute)%5==1:
            pass_if[idx]=True
        time_fraction=(1+(datetime.datetime.now()-time_offset[idx]).seconds)/300
        #avg vol for stock to be retrieved from excel file
        change=(volume_list[idx]-volume_offset[idx])/(time_fraction*float(average_vol[stock]))
        dvalues[idx].set(round(change,2))
        entries[idx].config(textvariable=dvalues[idx])
        if change>6.0:
            labels2[idx].config(bg="blue")
        elif change>2.0:
            labels2[idx].config(bg="orange")
        else:
            labels2[idx].config(bg=mycolor)
        avg1=(fifo_list[idx][0]+fifo_list[idx][1])/2
        avg2=(fifo_list[idx][60]+fifo_list[idx][61])/2
        avg3=(fifo_list[idx][118]+fifo_list[idx][119])/2
        #labels[idx].config(text=fifo_list[idx][119])
        #avg4=(fifo_list[idx][58]+fifo_list[idx][59])/2
        if avg3>avg2>avg1:
            green_status[idx]=1
            green_count[idx]+=1
            clabels[idx].config(text="("+str(green_count[idx]).zfill(3)+")")
            labels[idx].config(bg=green_dark)
            timer_var[idx]=datetime.datetime.now()
        if avg3<avg2<avg1:
            red_status[idx]=1
            red_count[idx]+=1
            clabels[idx].config(text="("+str(red_count[idx]).zfill(3)+")")
            labels[idx].config(bg=red_dark)
            timer_var[idx]=datetime.datetime.now()
        if green_status[idx]==1 and (datetime.datetime.now()-timer_var[idx]).seconds>100:
            labels[idx].config(bg=mycolor)
        elif green_status[idx]==1 and (datetime.datetime.now()-timer_var[idx]).seconds>60:
            labels[idx].config(bg=green_light)
        elif green_status[idx]==1 and (datetime.datetime.now()-timer_var[idx]).seconds>30:
            labels[idx].config(bg=green_medium)

我在下一行(上面代码中的botton的第六行)收到int对象不可更改的错误,

if green_status[idx]==1 and (datetime.datetime.now()-timer_var[idx]).seconds>100:
            labels[idx].config(bg=mycolor)

green_status变量已被定义为列表,但是以某种方式将其视为int对象。 time_offset对象和pass_if以类似的方式定义,但是我没有得到它们的错误。请告知。

2 个答案:

答案 0 :(得分:0)

恐怕这行 idx=int(company_index_pair[stock]) 引起问题。您确定company_index_pairstock的数据类型正确吗?

答案 1 :(得分:0)

如何定义标签?他们有可能成为int吗?当您遇到此类问题时,也可以粘贴准确的错误消息:)