繁体   English   中英

最大递归错误Python

[英]maximum recursion error Python

我正在尝试从ESPN.com抓取一些盒子分数并将其放入Pandas DataFrame中。 过去,我以相同的方式做了类似的事情,没有任何问题。 但是,在这种情况下,当我尝试保存DataFrame时出现此错误。

RuntimeError:调用Python对象时超出了最大递归深度

尝试将其另存为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')

()中的RuntimeError Traceback(最近一次通话结束)----> 1 testScrape.save('testScrape')

C:\\ Python27 \\ lib \\ site-packages \\ pandas \\ core \\ generic.pyc在save((自身,路径))26 27 def save((自身,路径):---> 28 com.save(self,path)29 30 @classmethod

C:\\ Python27 \\ lib \\ site-packages \\ pandas \\ core \\ common.pyc保存(obj,path)1562 f = open(path,'wb')1563 try:-> 1564 pickle.dump(obj,f,协议= pickle.HIGHEST_PROTOCOL)最后1565年:1566 f.close()

RuntimeError:调用Python对象时超出了最大递归深度

print data

退货

{'AwayTeam':[u'LAL'],'AwayOT4':[nan],'AwayQ4':[27],'AwayQ3':[36],'AwayQ2':[24],'AwayQ1':[16 ],'AwayOT1':[nan],'AwayOT2':[nan],'AwayOT3':[nan]}

pickle.dump中的此异常通常意味着您正在尝试(直接或间接地)腌制包含其自身的对象。

但是,什么对象包含自身呢? 当您全部print出来时,它们看起来都很好。

这是awayTeam这是一个bs4.element.NavigableString ,您可以通过这样得到:

awayTeam = awayQTRScores[0]

NavigableStringunicode的子类,并且没有定义自定义__str____repr__ ,所以您可能不会从仅仅print awayTeam甚至是print repr(awayTeam)注意到它,因此它的打印效果类似于字符串。

但是它也没有定义自定义的Pickler,因此它使用默认的Pickler。 通常, bs4对象并非设计为可腌制的,而许多对象则不能。 特别是, NavigableString是一个间接包含其自身的对象。 正如文档所说:

如果要在Beautiful Soup之外使用NavigableString ,则应在其上调用unicode()将其转换为普通的Python Unicode字符串。 如果不这样做,即使使用完Beautiful Soup字符串也会带有对整个Beautiful Soup解析树的引用

当然,解析树包含对字符串的引用,等等。因此,永远不要腌制此类型。

解决方案很简单。 您需要一个普通的旧unicode字符串,而不是NavigableString ,因此您可以这样做:

awayTeam = unicode(awayQTRScores[0])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM