【发布时间】:2017-10-26 20:57:27
【问题描述】:
我正在使用第三方模块,并且在调用这些模块时遇到了错误。 这是编译器显示的内容:
C:\Users\Dmitry\AppData\Local\Enthought\Canopy\edm\envs\User\lib\site- packages\backtrader\feeds\csvgeneric.py in _loadline(self, linetokens)
148 # get it from the token
149 csvfield = linetokens[csvidx]
--> 150 print(csvidx)
151
152 if csvfield == '':
IndexError: list index out of range
我特意添加了 print(csvidx) 来查看 csvidx 的值,但它没有显示在控制台上。我究竟做错了什么?非常感谢。
代码如下:
def _loadline(self, linetokens):
# Datetime needs special treatment
dtfield = linetokens[self.p.datetime]
if self._dtstr:
dtformat = self.p.dtformat
if self.p.time >= 0:
# add time value and format if it's in a separate field
dtfield += 'T' + linetokens[self.p.time]
dtformat += 'T' + self.p.tmformat
dt = datetime.strptime(dtfield, dtformat)
else:
dt = self._dtconvert(dtfield)
if self.p.timeframe >= TimeFrame.Days:
# check if the expected end of session is larger than parsed
if self._tzinput:
dtin = self._tzinput.localize(dt) # pytz compatible-ized
else:
dtin = dt
dtnum = date2num(dtin) # utc'ize
dteos = datetime.combine(dt.date(), self.p.sessionend)
dteosnum = self.date2num(dteos) # utc'ize
if dteosnum > dtnum:
self.lines.datetime[0] = dteosnum
else:
# Avoid reconversion if already converted dtin == dt
self.l.datetime[0] = date2num(dt) if self._tzinput else dtnum
else:
self.lines.datetime[0] = date2num(dt)
# The rest of the fields can be done with the same procedure
for linefield in (x for x in self.getlinealiases() if x != 'datetime'):
# Get the index created from the passed params
csvidx = getattr(self.params, linefield)
if csvidx is None or csvidx < 0:
# the field will not be present, assignt the "nullvalue"
csvfield = self.p.nullvalue
else:
# get it from the token
print(csvidx)
csvfield = linetokens[csvidx]
if csvfield == '':
# if empty ... assign the "nullvalue"
csvfield = self.p.nullvalue
# get the corresponding line reference and set the value
line = getattr(self.lines, linefield)
line[0] = float(float(csvfield))
return True
【问题讨论】:
-
在定义
csvfield之前尝试print(csvidx)。 -
法比恩,感谢您对我的照顾。但不,同样的结果。
C:\Users\Dmitry\AppData\Local\Enthought\Canopy\edm\envs\User\lib\site-packages\backtrader\feeds\csvgeneric.py in _loadline(self, linetokens) 147 else: 148 # get it from the token --> 149 print(csvidx) 150 csvfield = linetokens[csvidx] 151 IndexError: list index out of range. -
那你能显示以这个错误结尾的代码吗?看看
csvfiled、linetokens和csvidx是什么(以及它们是如何定义的)会有所帮助。 -
这确实是像
pdb这样的调试器的用途。我经常发现remote_pdb 在应用程序干扰控制台输出的情况下很有用。