Python 最大递归错误
我正试图从ESPN.com上获取一些框分数,并将它们放入熊猫数据框中。我过去也以同样的方式做过类似的事情,没有任何问题。然而,在这种情况下,当我试图保存数据帧时,我得到了这个错误 RuntimeError:调用Python对象时超出了最大递归深度Python 最大递归错误,python,pandas,Python,Pandas,我正试图从ESPN.com上获取一些框分数,并将它们放入熊猫数据框中。我过去也以同样的方式做过类似的事情,没有任何问题。然而,在这种情况下,当我试图保存数据帧时,我得到了这个错误 RuntimeError:调用Python对象时超出了最大递归深度 print data 我在尝试将其保存为hdf5表时遇到类似错误 即使是这个片段也会出现同样的错误。我很困惑它为什么要这么做?这与功能有关吗 url = 'http://espn.go.com/nba/boxscore?gameId=40027877
print data
我在尝试将其保存为hdf5表时遇到类似错误
即使是这个片段也会出现同样的错误。我很困惑它为什么要这么做?这与功能有关吗
url = 'http://espn.go.com/nba/boxscore?gameId=400278773'
boxurl = urllib2.urlopen(url).read()
soup = BeautifulSoup(boxurl)
tables = soup.findAll('table')
lineScoreTable = tables[-2]
lineScoreRows = lineScoreTable.findAll('tr')
def GetAwayQTRScores():
scoreRow = lineScoreRows[1].findAll('td')
awayQTRScores = []
for x in scoreRow:
scores = x.string
awayQTRScores.append(scores)
return awayQTRScores # returns list
awayQTRScores = GetAwayQTRScores()
awayTeam = awayQTRScores[0]
awayQ1 = int(awayQTRScores[1])
awayQ2 = int(awayQTRScores[2])
awayQ3 = int(awayQTRScores[3])
awayQ4 = int(awayQTRScores[4])
awayOT1 = np.nan if len(awayQTRScores) < 7 else int(awayQTRScores[5])
awayOT2 = np.nan if len(awayQTRScores) < 8 else int(awayQTRScores[6])
awayOT3 = np.nan if len(awayQTRScores) < 9 else int(awayQTRScores[7])
awayOT4 = np.nan if len(awayQTRScores) < 10 else int(awayQTRScores[8])
data = {'AwayTeam' :[awayTeam],
'AwayQ1' : [awayQ1],
'AwayQ2' : [awayQ2],
'AwayQ3' : [awayQ3],
'AwayQ4' : [awayQ4],
'AwayOT1' : [awayOT1],
'AwayOT2' : [awayOT2],
'AwayOT3' : [awayOT3],
'AwayOT4' : [awayOT4]}
testScrape = pd.DataFrame(data)
testScrape.save('testScrape')
返回
{'AwayTeam':[u'LAL','AwayOT4':[nan],'AwayQ4':[27],'AwayQ3':[36],'AwayQ2':[24],'AwayQ1':[16],'AwayOT1':[nan],'AwayOT2':[nan],'AwayOT3':[nan]} 但是什么物体包含它自己呢?当你把它们全部打印出来时,它们看起来都很好 这是一个awayTeam这是一个,你可以通过这样做得到:
awayTeam = awayQTRScores[0]
您可能仅仅从print-awayTeam
或者甚至从print-repr(awayTeam)
中没有注意到它,因为navigablesting
是unicode
的一个子类,并且没有定义自定义的\uuuuu str\uuuuuu
或\uuuuuuuuu repr\uu
,所以它像字符串一样打印
但是它也没有定义自定义的pickler,所以它使用默认的pickler。一般来说,bs4
对象的设计不是为了进行pickle处理,它们中的许多对象也不能进行pickle处理。特别是,NavigableString
是一个间接包含自身的对象。正如文件所说:
如果您想在Beautiful Soup之外使用NavigableString
,您应该对其调用unicode()
,将其转换为普通的Python unicode字符串。如果您不这样做,您的字符串将携带对整个Beautiful Soup解析树的引用,即使您已经使用Beautiful Soup
当然,解析树包含对字符串的引用,等等。因此,这种类型永远不能被pickle
解决办法很简单。您想要的是一个普通的unicode
字符串,而不是navigablesting
,因此您可以这样做:
awayTeam = unicode(awayQTRScores[0])
通常,它有助于显示完整的回溯,或者至少显示引发异常的行,而不仅仅是异常的文本。您能发布完整的堆栈跟踪吗?另外,请修复缩进以使代码可运行。奇怪的是您可以执行DataFrame(testScrape.to_dict('foo'))。save(),这看起来像是一个奇怪的错误,可能最好将其报告为github问题。等等,我知道了
awayTeam
不是一个str
,它是一个自包含的对象。让我写一个更详细的答案。谢谢!我正在使用Python3.6.x,并围绕str(awayQTRScore[0])
完成了这个技巧。