2016-05-31 2 views
0

J'ai une fonctionaddition répétée de la ligne lors de l'utilisation pour-autre boucle

def static_nat_fwsm_check(mapped_to_real_address_pairs,FWSM_ACLs): 
    amended_static_nat_acl=[] 
    for acl_line in FWSM_ACLs: 
    for i,j in mapped_to_real_address_pairs: 
     if j in acl_line: 
     amended_static_nat_acl.append('!STATIC NAT SUBSTITUTION FOR '+acl_line) 
     amended_static_nat_acl.append(re.sub(j,i,acl_line)) 
     break 
    else: 
     amended_static_nat_acl.append(acl_line) 
    return amended_static_nat_acl 

L'idée derrière la fonction est de prendre une liste de tuples et une liste de chaînes comme arguments. Les tuples contiennent un mappage d'adresses réelles aux adresses mappées. Si l'adresse mappée est trouvée dans la chaîne de la liste, elle est remplacée par l'adresse réelle

La dernière ligne de la liste des chaînes est ajoutée deux fois à la nouvelle liste que je crée. Lorsque je parcours la fonction en ajoutant des instructions d'impression, il semble que le dernier tuple de la liste soit évalué deux fois.

je pourrais contourner le problème en ajoutant une autre instruction if à la clause else, mais je voudrais comprendre où je vais mal. Toute aide grandement appréciée!

+2

La façon dont votre empreinte semble, que 'else' clause appartient en fait à la déclaration' for' ([qui est parfaitement légal] (http://stackoverflow.com/questions/9979970/why-does-python-use- else-after-for-and-while-loops)) - c'est ce que vous vouliez/à quoi ressemble votre code? –

+1

Peut-être que le problème n'est pas dans cette fonction. Est-il possible que la dernière chaîne soit réellement dans 'FWSM_ACLs' deux fois? – evergreen

+0

@evergreen c'est la première chose que j'ai vérifiée. C'est seulement là une fois. LukasGraf J'ai testé ça. Si la clause else est déplacée vers la première boucle for, elle n'évalue que les lignes où des substitutions doivent être effectuées et la toute dernière ligne dans les FWSM_ACL. Je dois passer par FWSM_ACLs, remplacer j par i, et ajouter la ligne "tel quel" si aucune substitution n'est faite. Je me demande si je suis en train d'évaluer la bonne façon. Peut-être devrais-je déplacer les tuples vers la boucle for externe, et faire de la liste de tuple une liste vide par défaut pour attraper le cas où il n'y a pas de tuples à évaluer par rapport à la liste. –

Répondre

0

Erreur utilisateur. J'ai utilisé une fonction précédente pour générer une entrée pour cette fonction. Regex vaguement défini, plus un nom ACL qui était un sous-ensemble d'autres noms ACL a provoqué la sortie en double.