1
resposta

RecursionError: maximum recursion depth exceeded

Não estou conseguindo resolver o erro acima mencionado, o meu código está estruturado da seguinte forma:

Tenho o arquivo Connect.py "classe de conexão com o banco de dados" e nesse arquivo eu crio uma instancia da class logger para registro de log, segue um pequeno trecho do meu código de conexão

class Connect:
    DB = None
    def __init__ (self):
        self.log = Logger.Logger()
        try:
            self.DB = psycopg2.connect(self.connectionFile())
        except (Exception, psycopg2.DatabaseError) as error:
            self.log.loggerException(error)
            return error

Tenho a class Logger.py e dentro dela eu faço a chamada da class Connect, para executar um select no banco de dados e verificar as configurações de logs, como por exemplo (nível de log, se gera log ou não etc.), porem quando estou chamando a class de conexão com banco de dados devido eu já ter instanciado a class logger dentro dela me retorna o erro "RecursionError"

import logging
import sys
from classes import DBConection

class Logger:

    # Create logger
    logger = logging.getLogger(__name__)
    # Create console handler and set level to debug
    ch = logging.FileHandler(filename='log/appchamados.log', mode='a', encoding=None, delay=True)
    # self.ch = logging.StreamHandler()
    ch.setLevel(logging.DEBUG)
    # Create formatter
    formatter = logging.Formatter('%(asctime)s - %(levelname)s: %(message)s')
    # Add formatter to ch
    ch.setFormatter(formatter)
    # Add ch to logger
    logger.addHandler(ch)

    def __init__(self):
        self.loggingLevel()
        self.db = DBConection.Connect()

    def loggerDebug(self, message):
        if self.gerLog():
            self.logger.debug(message)

Não encontrei uma solução para essa situação, gostaria de saber se alguém já lidou com esse tipo de erro e se eu devo ou não instanciar a class "Connect" na class "Logger", cuja class "Connect já possui uma "instancia" da class "Logger", se eu removo a instancia da class "Connect" da "Logger" funciona normalmente, se eu adiciono ocorre o erro.

1 resposta

Olá Samuel. O problema que você está enfrentando é bem clássico no Python. Quando você faz o import na forma: from PACKAGE import SOMETHING essa diretiva é executada quando o interpretador chega nela. Dessa forma cria-se um loop infinito de imports recursivos, já que uma chama a outra. O que você pode fazer para resolver é dar um import classes e realizar a chamada do connect com o namespace completo. Para mais informações e detalhes. Dá uma conferida nesse post do StackOverflow que eles explicam em mais detalhes.