__len__
似乎被过早调用,并且没有被我的调试器(vs studio)检测到。看看下面的简化代码,它再现了这个问题。
class DataFrameReader:
#
def __init__(self, filePath, header=None, bufferLines=1000):
"""docstring"""
self._dataFrameReader = None
self.BufferLines = bufferLines
self._peekBuffer = None
self._dataFrameReader = pd.read_csv(filePath,
dtype=header, chunksize=bufferLines)
return
#
def __len__(self):
"""docstring"""
lineCount = None
if not self._peekBuffer:
self._peekBuffer = next(self._dataFrameReader, [])
lineCount = len(self._peekBuffer)
return lineCount
创建此类的实例时:
filePath = ((r'C:\Users\jmarshall\source\repos\')
(r'First200_Base_TestDataFrameIO.csv'))
_dfr = DataFrameReader(filePath, bufferLines=25)
在第11行实例化dataframe TextReader(pd.read_csv)之后,变量的值
self._peekBuffer
成为我正在读取的csv的前25条记录,格式为数据帧。
怎么会这样?
这个
赛尔夫_偷窥缓冲区
在DataFrameReader(例如。
len(_dfr)
).
看起来真的很疯狂
pd.read_csv
可能知道
__莱恩__
方法,并能够调用它。此外,当我把断点放在中间位置时,没有断点被击中
__莱恩__
方法,但如果我把它注释掉
__莱恩__
然后
赛尔夫_偷窥缓冲区
作为
None
(应该是这样的!)。
有什么想法吗?