Python的最大遞迴深度錯誤 “maximum recursion depth exceeded while calling a Python object”

來源:互聯網
上載者:User

標籤:python   maximum recursion   getrecursionlimit   setrecursionlimit   

  今天在寫爬蟲的時候,發現了一個詭異的事情,使用str方法強制轉換一個BeautifulSoup對象成字串的時候報錯了,提示是“maximum recursion depth exceeded while calling a Python object”,意思大致是“當調用該對象超過最大遞迴深度”

  報錯如下:

  Traceback (most recent call last):  File "<stdin>", line 1, in <module>  File "C:\Python27\lib\site-packages\bs4\element.py", line 1045, in __str__    return self.encode()  File "C:\Python27\lib\site-packages\bs4\element.py", line 1055, in encode    u = self.decode(indent_level, encoding, formatter)  File "C:\Python27\lib\site-packages\bs4\element.py", line 1126, in decode    indent_contents, eventual_encoding, formatter)  File "C:\Python27\lib\site-packages\bs4\element.py", line 1195, in decode_contents    formatter))  File "C:\Python27\lib\site-packages\bs4\element.py", line 1126, in decode  ......    File "C:\Python27\lib\site-packages\bs4\element.py", line 1126, in decode    indent_contents, eventual_encoding, formatter)  File "C:\Python27\lib\site-packages\bs4\element.py", line 1195, in decode_contents    formatter))  File "C:\Python27\lib\site-packages\bs4\element.py", line 1098, in decode    text = self.format_string(val, formatter)  File "C:\Python27\lib\site-packages\bs4\element.py", line 163, in format_string    output = formatter(s)  File "C:\Python27\lib\site-packages\bs4\element.py", line 120, in substitute_xml    ns, EntitySubstitution.substitute_xml)  File "C:\Python27\lib\site-packages\bs4\element.py", line 104, in _substitute_if_appropriate    if (isinstance(ns, NavigableString)RuntimeError: maximum recursion depth exceeded while calling a Python object

  而後更神奇的是我使用的ptpython並沒有報錯,直接通過了。

  其實原因是在Python裡的遞迴調用是有限制的,可以使用sys模組裡的getrecursionlimit方法查看的到,即(想深入的同學可以Google上搜尋一番,這裡提供筆者所搜尋到的https://cyrusin.github.io/2015/12/08/python-20151208/)

sys.getrecursionlimit()

開啟終端運行Python,可以看到預設限制值為1000

650) this.width=650;" src="http://s1.51cto.com/wyfs02/M01/8B/C3/wKiom1hXscDBcpqVAAAKssVwL6Y070.png-wh_500x0-wm_3-wmp_4-s_698534623.png" title="QQ20161219180614.png" alt="wKiom1hXscDBcpqVAAAKssVwL6Y070.png-wh_50" />

而ptpython裡預設限制值為2000,這也不難解釋為什麼python下直接運行會報最大深度遞迴錯誤而ptpython可以正常運行了。

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/8B/C3/wKiom1hXtBqjFGRnAAADxmCmvtk125.png-wh_500x0-wm_3-wmp_4-s_803356705.png" title="QQ20161219181829.png" alt="wKiom1hXtBqjFGRnAAADxmCmvtk125.png-wh_50" />

  那麼該來解決這個問題了,有get自然有set(當然還有其他方法比如達到深度限制時就做對應處理這方面不符合筆者目前需求,所以就不贅述,有需求的同學請自行Google百度一下),那麼設定最大深度限制的方法就是setrecursionlimit了,至於設定值為多少你自行設定了

sys.setrecursionlimit(2000)

至此,問題解決!


本文出自 “雲驛站 -Leyex學習筆記” 部落格,請務必保留此出處http://leyex.blog.51cto.com/4230949/1884041

Python的最大遞迴深度錯誤 “maximum recursion depth exceeded while calling a Python object”

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.