maximum recursion depth exceeded while calling a Python object спустя час работы

Изучаю парсер, решил написать прогу которая будет парсить значение криптовалют, вроде все работает, но через час вываливаются ошибки:

Traceback (most recent call last):
  File "F:\Projects py\progect\CryptoCourse\main.py", line 52, in <module>
    Crypto_course()
  File "F:\Projects py\progect\CryptoCourse\main.py", line 17, in __init__
    Crypto_course.loop()
  File "F:\Projects py\progect\CryptoCourse\main.py", line 50, in loop
    Crypto_course.loop()
  File "F:\Projects py\progect\CryptoCourse\main.py", line 50, in loop
    Crypto_course.loop()
  File "F:\Projects py\progect\CryptoCourse\main.py", line 50, in loop
    Crypto_course.loop()
  [Previous line repeated 970 more times]
  File "F:\Projects py\progect\CryptoCourse\main.py", line 46, in loop
    Crypto_course.course_parser(PYRK_RUB, 'Pyrk')
  File "F:\Projects py\progect\CryptoCourse\main.py", line 22, in course_parser
    full_page = requests.get(NAME_RUB, headers=headers)
  File "C:\Python\lib\site-packages\requests\api.py", line 75, in get
    return request('get', url, params=params, **kwargs)
  File "C:\Python\lib\site-packages\requests\api.py", line 61, in request
    return session.request(method=method, url=url, **kwargs)
  File "C:\Python\lib\site-packages\requests\sessions.py", line 542, in request
    resp = self.send(prep, **send_kwargs)
  File "C:\Python\lib\site-packages\requests\sessions.py", line 655, in send
    r = adapter.send(request, **kwargs)
  File "C:\Python\lib\site-packages\requests\adapters.py", line 439, in send
    resp = conn.urlopen(
  File "C:\Python\lib\site-packages\urllib3\connectionpool.py", line 699, in urlopen
    httplib_response = self._make_request(
  File "C:\Python\lib\site-packages\urllib3\connectionpool.py", line 445, in _make_request
    six.raise_from(e, None)
  File "<string>", line 3, in raise_from
  File "C:\Python\lib\site-packages\urllib3\connectionpool.py", line 440, in _make_request
    httplib_response = conn.getresponse()
  File "C:\Python\lib\http\client.py", line 1347, in getresponse
    response.begin()
  File "C:\Python\lib\http\client.py", line 331, in begin
    self.headers = self.msg = parse_headers(self.fp)
  File "C:\Python\lib\http\client.py", line 225, in parse_headers
    return email.parser.Parser(_class=_class).parsestr(hstring)
  File "C:\Python\lib\email\parser.py", line 67, in parsestr
    return self.parse(StringIO(text), headersonly=headersonly)
  File "C:\Python\lib\email\parser.py", line 56, in parse
    feedparser.feed(data)
  File "C:\Python\lib\email\feedparser.py", line 176, in feed
    self._call_parse()
  File "C:\Python\lib\email\feedparser.py", line 180, in _call_parse
    self._parse()
  File "C:\Python\lib\email\feedparser.py", line 295, in _parsegen
    if self._cur.get_content_maintype() == 'message':
  File "C:\Python\lib\email\message.py", line 594, in get_content_maintype
    ctype = self.get_content_type()
  File "C:\Python\lib\email\message.py", line 578, in get_content_type
    value = self.get('content-type', missing)
  File "C:\Python\lib\email\message.py", line 471, in get
    return self.policy.header_fetch_parse(k, v)
  File "C:\Python\lib\email\_policybase.py", line 316, in header_fetch_parse
    return self._sanitize_header(name, value)
  File "C:\Python\lib\email\_policybase.py", line 287, in _sanitize_header
    if _has_surrogates(value):
  File "C:\Python\lib\email\utils.py", line 57, in _has_surrogates
    s.encode()
RecursionError: maximum recursion depth exceeded while calling a Python object

Process finished with exit code 1

Сам код:

import requests
from bs4 import BeautifulSoup
import time
import datetime

PYRK_RUB = 'https://coinmarketcap.com/ru/currencies/pyrk/'
BITCOIN_RUB = 'https://coinmarketcap.com/ru/currencies/bitcoin/'
ETHEREUM_RUB = 'https://coinmarketcap.com/ru/currencies/ethereum/'
headers = {'User-Agent': }
old_value = dict.fromkeys(['difference', 'Pyrk', 'Bitcoin', 'Ethereum'])


class Crypto_course:

    def __init__(self):
        Crypto_course.loop()

    # Парсер курса криптовалют
    def course_parser(NAME_RUB, nameCrypto):
        #
        full_page = requests.get(NAME_RUB, headers=headers)
        #
        soup = BeautifulSoup(full_page.content, 'html.parser')
        #
        convert = soup.findAll("div", {"class": "priceValue"})
        global old_value
        new_value = convert[0].text.replace('₽', '')
        dt = datetime.datetime.today().strftime("%A %d.%m.%Y %H:%M:%S")
        new_value = round(float(new_value.replace(',', '')), 2) # Округление конченое
        if new_value != old_value[f'{nameCrypto}']:
            if old_value[f'{nameCrypto}'] != None and new_value > old_value[f'{nameCrypto}']:
                old_value['difference'] = round(new_value - old_value[f'{nameCrypto}'], 2)
                print(f'{dt}| 1 {nameCrypto} = {new_value}₽.', '+', old_value['difference'], '₽')
                old_value[f'{nameCrypto}'] = new_value
            elif old_value[f'{nameCrypto}'] != None and new_value < old_value[f'{nameCrypto}']:
                old_value['difference'] = round(old_value[f'{nameCrypto}'] - new_value, 2)
                print(f'{dt}| 1 {nameCrypto} = {new_value}₽.', '-', old_value['difference'], '₽')
                old_value[f'{nameCrypto}'] = new_value
            else:
                print(f'{dt}| 1 {nameCrypto} = {new_value}₽')
                old_value[f'{nameCrypto}'] = new_value

    # Зацикливание
    def loop():
        Crypto_course.course_parser(PYRK_RUB, 'Pyrk')
        Crypto_course.course_parser(BITCOIN_RUB, 'Bitcoin')
        Crypto_course.course_parser(ETHEREUM_RUB, 'Ethereum')
        time.sleep(3)
        Crypto_course.loop()

Crypto_course()

Почему выскакивают куча ошибок спустя час? Если видите что-то неправильно описаное просьба указать так же если даже не относится к ошибкам. ООП так же только начал изучать.

Так же, в самом начале вываливаются ошибки:

C:\Python\lib\site-packages\numpy\_distributor_init.py:30: UserWarning: loaded more than 1 DLL from .libs:
C:\Python\lib\site-packages\numpy\.libs\libopenblas.WCDJNK7YVMPZQ2ME2ZZHJJRJ3JIKNDB7.gfortran-win_amd64.dll
C:\Python\lib\site-packages\numpy\.libs\libopenblas.XWYDX2IKJW2NMTWSFYNGFUWKQU3LYTCZ.gfortran-win_amd64.dll
  warnings.warn("loaded more than 1 DLL from .libs:"

Ответы (1 шт):

Автор решения: GrAnd

Ну так у вас Crypto_course.loop() зовёт сам семя в конце, отсюда и рекурсия. А она в Питоне не бесконечная (по-умолчанию ограничение 1000 вложенных вызовов). Так что через 3секунд*1000итераций (плюс время на распарсивание) оно и выпадет в ошибку.
Почему бы просто не написать бесконечный цикл?

    def loop():
        while True:
            Crypto_course.course_parser(PYRK_RUB, 'Pyrk')
            Crypto_course.course_parser(BITCOIN_RUB, 'Bitcoin')
            Crypto_course.course_parser(ETHEREUM_RUB, 'Ethereum')
            time.sleep(3)
→ Ссылка