IndexError:在打印len(list)>之后立即列出索引超出范围0

时间:2018-03-29 15:24:30

标签: python python-3.x debugging multiprocessing python-multiprocessing

我确实按顺序拥有这两行代码:

print(len(counter.ondas))
onda = counter.ondas[-1]

我为第一行打印了13,它崩溃了,给我onda = counter.ondas[-1]一行说IndexError: list index out of range right after printing len(list)

它在崩溃之前工作了数千次。我不知道如何处理这个问题。

print(counter.ondas)的输出:

[Onda([<workers.mov.Mov object at 0x244EA050>], [Candle(4, 'GBP_JPY', Timestamp('2017-06-12 16:59:00'), 138.884, 138.897, 138.674, 138.76, 10957.0, True)]), Onda([<workers.mov.Mov object at 0x245073D0>], [Candle(4, 'GBP_JPY', Timestamp('2017-06-12 16:59:00'), 138.884, 138.897, 138.674, 138.76, 10957.0, True)...]

print(type(counter.ondas))的输出:

<class 'list'>

print(isinstance(counter.ondas, list))的输出:

True

完整错误回溯

    Traceback (most recent call last):
      File "C:\Users\joaoa\AppData\Local\Programs\Python\Python36-32\lib\multiprocessing\pool.py", line 119, in worker
        result = (True, func(*args, **kwds))
      File "C:\Users\joaoa\AppData\Local\Programs\Python\Python36-32\lib\multiprocessing\pool.py", line 44, in mapstar
        return list(map(*args))
      File "C:\Users\joaoa\PycharmProjects\aquitania\general_manager.py", line 88, in load_observer_manager
        observer_manager.update_load_run_data()
      File "C:\Users\joaoa\PycharmProjects\aquitania\observer\management\observer_manager.py", line 78, in update_load_run_data
        self.load_run_data()
      File "C:\Users\joaoa\PycharmProjects\aquitania\observer\management\observer_manager.py", line 91, in load_run_data
        self.feeder.exec_df(df[self.start_date:])
      File "C:\Users\joaoa\PycharmProjects\aquitania\data_source\feeder.py", line 429, in exec_df
        self.feed(candle)
      File "C:\Users\joaoa\PycharmProjects\aquitania\data_source\feeder.py", line 98, in feed
        self.make_candle(ts, candle, criteria_table)
      File "C:\Users\joaoa\PycharmProjects\aquitania\data_source\feeder.py", line 126, in make_candle
        self.set_values(ts, candle)
      File "C:\Users\joaoa\PycharmProjects\aquitania\data_source\feeder.py", line 310, in set_values
        ts_obs.feed_complete(self._candles[ts])
      File "C:\Users\joaoa\PycharmProjects\aquitania\observer\management\observer_loader.py", line 100, in feed_complete
        observer.update_last_candle(candle, store_candle)
      File "C:\Users\joaoa\PycharmProjects\aquitania\observer\abstract\observer_abc.py", line 93, in update_last_candle
        self.set_observe(self.update_method(candle))
      File "C:\Users\joaoa\PycharmProjects\aquitania\observer\ondas\ondas_inside.py", line 393, in update_method
        self.update_routine(counter_id=2, candle=candle)
      File "C:\Users\joaoa\PycharmProjects\aquitania\observer\ondas\ondas_inside.py", line 412, in update_routine
        onda = list(counter.ondas)[-1]
    IndexError: list index out of range
    """

    The above exception was the direct cause of the following exception:

    Traceback (most recent call last):
      File "C:/Users/joaoa/PycharmProjects/aquitania/general_manager.py", line 145, in <module>
        gm.run()
      File "C:/Users/joaoa/PycharmProjects/aquitania/general_manager.py", line 113, in run
        list_of_observer_managers = self.load_all_observer_managers()
      File "C:/Users/joaoa/PycharmProjects/aquitania/general_manager.py", line 60, in load_all_observer_managers
        observer = currency_pool.map(self.load_observer_manager, list_of_currencies)
      File "C:\Users\joaoa\AppData\Local\Programs\Python\Python36-32\lib\multiprocessing\pool.py", line 266, in map
        return self._map_async(func, iterable, mapstar, chunksize).get()
      File "C:\Users\joaoa\AppData\Local\Programs\Python\Python36-32\lib\multiprocessing\pool.py", line 644, in get
        raise self._value
    IndexError: list index out of range

1 个答案:

答案 0 :(得分:0)

我能够识别这个问题。错误是在一个单独的进程中抛出而不是正在打印的错误,并且由于某种原因,只有在打印结果的进程被另一个不相关的错误中断后才会出现错误。

奇怪的行为,但现在我能够解决这个问题。

在单一流程模式下进行调试有很大帮助。

感谢您的帮助。