telepot icon indicating copy to clipboard operation
telepot copied to clipboard

Cannot recover from stack overflow.

Open javadfarah opened this issue 7 years ago • 3 comments

hi.first of all sorry for my english. i don't khnow why i get this error. my bot work correctly but some times breaks by this error

`Fatal Python error: Cannot recover from stack overflow.

Current thread 0x00007fbb6d513700 (most recent call first): File "/usr/local/lib/python3.6/socket.py", line 655 in close File "/usr/local/lib/python3.6/http/client.py", line 403 in _close_conn File "/usr/local/lib/python3.6/http/client.py", line 553 in _get_chunk_left File "/usr/local/lib/python3.6/http/client.py", line 563 in _readall_chunked File "/usr/local/lib/python3.6/http/client.py", line 456 in read File "/usr/local/lib/python3.6/site-packages/urllib3/response.py", line 380 in read File "/usr/local/lib/python3.6/site-packages/urllib3/response.py", line 159 in init File "/usr/local/lib/python3.6/site-packages/urllib3/response.py", line 467 in from_httplib File "/usr/local/lib/python3.6/site-packages/urllib3/connectionpool.py", line 617 in urlopen File "/usr/local/lib/python3.6/site-packages/urllib3/poolmanager.py", line 321 in urlopen File "/usr/local/lib/python3.6/site-packages/urllib3/poolmanager.py", line 349 in urlopen File "/usr/local/lib/python3.6/site-packages/urllib3/request.py", line 87 in request_encode_url File "/usr/local/lib/python3.6/site-packages/urllib3/request.py", line 66 in request File "ultimate3.py", line 296 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect File "ultimate3.py", line 300 in detect ...

Thread 0x00007fbb6e388700 (most recent call first): File "/usr/local/lib/python3.6/ssl.py", line 631 in read File "/usr/local/lib/python3.6/ssl.py", line 871 in read File "/usr/local/lib/python3.6/ssl.py", line 1009 in recv_into File "/usr/local/lib/python3.6/socket.py", line 586 in readinto File "/usr/local/lib/python3.6/http/client.py", line 258 in _read_status File "/usr/local/lib/python3.6/http/client.py", line 297 in begin File "/usr/local/lib/python3.6/http/client.py", line 1331 in getresponse File "/usr/local/lib/python3.6/site-packages/urllib3/connectionpool.py", line 383 in _make_request File "/usr/local/lib/python3.6/site-packages/urllib3/connectionpool.py", line 601 in urlopen File "/usr/local/lib/python3.6/site-packages/urllib3/poolmanager.py", line 321 in urlopen File "/usr/local/lib/python3.6/site-packages/urllib3/request.py", line 148 in request_encode_body File "/usr/local/lib/python3.6/site-packages/telepot/api.py", line 154 in request File "/usr/local/lib/python3.6/site-packages/telepot/init.py", line 491 in _api_request File "/usr/local/lib/python3.6/site-packages/telepot/init.py", line 993 in getUpdates File "/usr/local/lib/python3.6/site-packages/telepot/loop.py", line 60 in run_forever File "/usr/local/lib/python3.6/threading.py", line 864 in run File "/usr/local/lib/python3.6/threading.py", line 916 in _bootstrap_inner File "/usr/local/lib/python3.6/threading.py", line 884 in _bootstrap

Thread 0x00007fbb6eb89700 (most recent call first): File "/usr/local/lib/python3.6/site-packages/telepot/init.py", line 458 in run File "/usr/local/lib/python3.6/threading.py", line 916 in _bootstrap_inner File "/usr/local/lib/python3.6/threading.py", line 884 in _bootstrap

Thread 0x00007fbb6f38a700 (most recent call first): File "/usr/local/lib/python3.6/threading.py", line 295 in wait File "/usr/local/lib/python3.6/queue.py", line 164 in get File "/usr/local/lib/python3.6/site-packages/telepot/loop.py", line 36 in run_forever File "/usr/local/lib/python3.6/site-packages/telepot/loop.py", line 160 in run_forever File "/usr/local/lib/python3.6/threading.py", line 864 in run File "/usr/local/lib/python3.6/threading.py", line 916 in _bootstrap_inner File "/usr/local/lib/python3.6/threading.py", line 884 in _bootstrap

Thread 0x00007fbb7573d700 (most recent call first): File "ultimate3.py", line 480 in `

  1. line296
    `
try:
   line296 response = self.s.request("get",link, timeout=2).data # get page data from server
except:
  time.sleep(1)
  self.detect(url=link):

`

line 296 and 300 is in the same function my function is:

`

292-def detect(self,url): 293- 294- link = url 295- try: 296- response = self.s.request("get",link, timeout=2).data # get page data from server, 297- except: 298- 299- time.sleep(1) 300- self.detect(url=link) 301- doc = html.document_fromstring(response) 302- #detect film&serial 303- element=doc.cssselect(".category > a") 304- ser=doc.xpath("/html/body/section/div[3]/div[1]/div/article/div[1]/h1/a")[0].text_content() 305- 306- self.category="film" 307- for elem in element: 308- if "سریال" in elem.text_content() or "سریال" in ser: 309- self.category="serial" 310- if self.category != "serial": 311- 312- self.catchfilm(url) 313- if self.category == "serial": 314- self.catchsserial(url) `

and line 480 is end of code `

while 1: time.sleep(10) `

thanks for your help

javadfarah avatar Dec 14 '17 16:12 javadfarah

Hello @javadfarah,

you might want to refactor your Exception-handling as you built a loop that caused a stack overflow.

For example you could replace lines 295 up until 300 with:

retries = 5
for retry in range(1, retries + 1):
  try:
    response = self.s.request("get", link, timeout=2).data
  except Exception as err:
    print("Failed to fetch data from {url} [{retry}/{retries}]: {err}".format(
      url=url, retry=retry, retries=retries err=repr(err)))
    time.sleep(retry)
  else:
    break
else:
  print("Failed %s times to fetch data from %s" % (retries, url))
  return

Good luck!

das7pad avatar Dec 14 '17 18:12 das7pad

hello @das7pad thank you for reply but i want to send a correct answer to my user! i cannot tel him i'm sorry test again! so i should make a loop until get sightly response

javadfarah avatar Dec 14 '17 20:12 javadfarah

You could increase the retries value to 10000 - even a while True loop has the same effect. It is a solution for the shown error as the retries do not stack anymore, they stay at the same level.

das7pad avatar Dec 15 '17 00:12 das7pad