我正在尝试使用3个特定列表(峰值,X3和Y3)制作彩色地图。我编写的列表代码使用insert函数构建。代码如下所示:
Traceback (most recent call last):
File "/Users/AhmedNiri/Ahmed/2D_Mapping_Program_V8.py", line 433, in on_scar_button
self.scar_map(file_info, elec_array, aux_elec, act_info, act, act_type, array_data)
File "/Users/AhmedNiri/Ahmed/2D_Mapping_Program_V8.py", line 911, in scar_map
dif = ((((max_V[k] - min_V[k])/(4096.0))*10.0)/elec_array.chan[k].gain)*1000
IndexError: list index out of range
我的目的是获取所有3个列表并记录act_info.b_act [k]不大于零的情况。 当我尝试运行此代码时,会发生此错误:
{{1}}
似乎当act_info.b_act [k]小于0时,它进入else语句记录,它小于零,然后似乎已经中断了列表生成,因此给了我这个错误。我没有使用python太长时间才知道如何解决这个问题。
提前感谢您的帮助:)。
答案 0 :(得分:2)
您的堆栈跟踪会告诉您刚才所说的内容。索引 k 超出范围。它试图在不存在的数据(列表,字典或元组等)中调用某些东西。为了避免这会导致程序崩溃,请使用try: except:
块包装if条件。
for k in range(112):
try:
if (act_info.nb_act[k]) >0:
max_V.insert(k,np.max(array_data[:,k]))#find the maximum voltage for the set of samples of each channel
min_V.insert(k,np.min(array_data[:,k])) #find the minimum voltage for the set of samples of each channe
dif = ((((max_V[k] - min_V[k])/(4096.0))*10.0)/elec_array.chan[k].gain)*1000
peak.insert(k,dif) #then compute the difference between the max and min to find the peak-to-peak value
X3.insert(k, elec_array.chan[k].x) #get the coordinates
Y3.insert(k, elec_array.chan[k].y)
except IndexError:
pass
它已设置为通过,因此如果再次发生这种情况,它将不会使您的程序崩溃。您可以将其设置为关闭程序,或标记用户然后忽略它等等。