如果抛出错误,则将变量放在里面

时间:2017-02-12 21:02:19

标签: python python-2.7 python-3.x

for i in range(len(data_list) - 1):
    if(data_list[i] == 0):
        continue;
    timeline[int(int(data_list[i][1:]) / FIFTEEN_MINUTE_MS)] += 1;
    k = i + 1;
    while k < len(data_list) - 1:
        if data_list[i][0] == data_list[k][0]:
            print(data_list[i]);
            print(data_list[k]);
            tyre1 = int(data_list[i][1:]);
            tyre2 = int(data_list[k][1:]);

            #Error here
            if((tyre2 - tyre1) < TWENTY_MPH and (tyre2 - tyre1) > SIXTY_MPH):
                print(data_list);
                if data_list[i][:1] == 'A':
                    if data_list[i + 1][:1] == 'A':
                        north += 1;
                    else:
                        south += 1;
                data_list[i] = 0;
                data_list[k] = 0;
                break;
            else:
                k += 1;
        else:
            k += 1;

此代码运行正常,我得到一个输出。但是当我在if语句中交换tyre1和tyre2时就像这样

if(tyre2 - tyre1 < TWENTY_MPH and tyre2 - tyre1 > SIXTY_MPH):

我收到此错误。

Traceback (most recent call last):
  File "<pyshell#20>", line 1, in <module>
    data_analyse(data_list)
  File "C:\Users\xxx\Desktop\data.py", line 19, in data_analyse
    if data_list[i][:1] == data_list[k][:1]:
TypeError: 'int' object is not subscriptable

我没看到什么?

编辑:

有关data_list的信息

data_list = ['A268981', 'A269123', 'A604957', 'B604960', 'A605128', 'B605132', 'A1089807', 'B1089810', 'A1089948', 'B1089951']

为什么我在没有人告诉原因的情况下被投票?这对初学者来说不容易在这里提问。

编辑2:添加打印语句以检查整数

i: 0
k: 1
A268981
A269123
['A268981', 'A269123', 'A604957', 'B604960', 'A605128', 'B605132', 'A1089807', 'B1089810', 'A1089948', 'B1089951']
i: 2
k: 4
A604957
A605128
[0, 0, 'A604957', 'B604960', 'A605128', 'B605132', 'A1089807', 'B1089810', 'A1089948', 'B1089951']

常量值

TWENTY_MPH = 280
SIXTY_MPH = 100

1 个答案:

答案 0 :(得分:0)

我认为你的算法应该重新考虑。

基本上你正在做的是

for i in [0..N]:
    for k in [i..N]:
        my_string_1 = data[i][0]
        my_string_2 = data[k][0]
        if my_string_1 == my_string_2:
            data[i] = 0
            data[k] = 0

这里的问题是,在某些时候,条件已经过验证,您将0分配给data[k],但是在另一个i循环迭代中,对于相同的k值重新读取这个值并将其视为某些'A268981'字符串中的某些字符串失败。

示例:

i = 3
k = 7
data[k] = 0

然后再

i = 5
k = 7
data[k][0]  <-- error

我没有运行你的代码,但我认为这可能会或可能不会发生,具体取决于其他条件if(tyre1 - tyre2 < TWENTY_MPH and tyre1 - tyre2 > SIXTY_MPH):,这就是为什么你会看到它,具体取决于那个条件。

另外,我不知道那些常数是什么,但我看不出两个相同的值是多少&lt; 20和&gt;你也应该发布这些价值。

注意:在处理字符串时,data_list[i][0]在我看来与data_list[i][:1]相当且更具可读性。