2013-06-19 4 views
-4

Je suis nouveau sur Python et je tente de convertir du code fourni par un fournisseur de python 2 à 3. Cette fonction semble vérifier si une instance de la classe est déjà créée afin qu'elle ne crée pas un groupe de nouvelles instances mais je ne suis pas sûr de savoir comment le convertir en python 3. Le contrôle de classe de type vs une déclaration d'instance a surtout besoin de mondified depuis l'ancien vs nouveaux types dans pythong 2/3 mais je ne suis pas sûr de savoir comment faire . Toute aide est grandement appréciée.conversion python 2 à 3

def get_instance(self, classid = "Main", use_cache = TRUE): 
    """ Either get the cached logger instance or create a new one 

    Note that this is safe, even if you have your target set to sys.stdout 
    or sys.stderr 
    """ 

    cache = Logger.cache 

    if (type(classid) == ClassType): 
     classid = classid.__name__ 
    elif (type(classid) == InstanceType): 
     classid = classid.__class__.__name__ 

    # classid has to be lowercase, because the ConfigParser returns sections lowercase 
    classid = lower(classid) 

    if ((cache.has_key(classid)) and (use_cache == TRUE)): 
     cat = Logger.cache[classid] 
    else: 
     instance = Logger.instance 

     # test for targets which won't deep copy 
     targets = instance.__Logger_targets 
     deepcopyable = TRUE 
     for i in range(len(targets)): 
      if (type(targets[i]) == FileType): 
       deepcopyable = FALSE 
     if (deepcopyable == FALSE): 
      # swap the non-copyable target out for a moment 
      del instance.__Logger_targets 
      cat = copy.deepcopy(instance) 
      instance.__Logger_targets = targets 
      cat.__Logger_targets = targets 
     else: 
      cat = copy.deepcopy(instance) 

     cat.__Logger_classname = classid 
     # new categories have their own private Nested Diagnostic Contexts 
     self.__Logger_ndc = [] 
     self.__Logger_classid = classid 

     cat.debug("Class %s instantiated" % classid) 
     if (use_cache == TRUE): 
      cache[classid] = cat 

    return cat 
+7

Avez-vous essayé d'utiliser le [outil de conversion] '2to3' (http://docs.python.org/2/library/2to3.html) – Kalyan02

+1

Vous pouvez le faire automatiquement http: //docs.python.org/3/library/2to3.html – uKolka

+1

Ceci est un code terrible. Vous devriez jsut le réécrire correctement dans Python3 –

Répondre

1

Ouvrez un terminal et tapez 2to3 nameofpythonfile.py et le fichier python sera automatiquement converti.

Comment ouvrir un terminal

de Windows: recherche cmd

* nix : Type ctrl-alt-T

+0

2to3 ne convertit pas le ClassType ou InstanceType – Greg

1
if (type(classid) == ClassType): 
    classid = classid.__name__ 
elif (type(classid) == InstanceType): 
    classid = classid.__class__.__name__ 

est à peu près équivalente à

if isinstance(classid, type): 
    classid = classid.__name__ 
else: 
    classid = classid.__class__.__name__ 

2to3 devrait couvrir le reste