2016-05-31 3 views
0

mit habe ich eine Funktionwiederholte Zugabe von Linie, wenn für-else-Schleife

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 

Die Idee hinter der Funktion, um eine Liste von Tupeln und eine Liste von Strings als Argument zu nehmen ist. Die Tupel enthalten eine Zuordnung von realen Adressen zu abgebildeten Adressen. Wenn die zugeordnete Adresse in der Zeichenfolge in der Liste gefunden wird, wird sie durch die reale Adresse ersetzt

Die letzte Zeile in der Liste der Zeichenfolgen wird der neuen Liste, die ich erstelle, zweimal hinzugefügt. Wenn ich die Funktion durchführe, die print-Anweisungen hinzufügt, sieht es so aus, als ob das letzte Tupel in der Liste zweimal ausgewertet wird.

Ich könnte das Problem umgehen, indem ich eine weitere if-Anweisung zur else-Klausel hinzufüge, aber ich würde gerne verstehen, wo ich falsch liege. Jede Hilfe sehr geschätzt!

+2

Wie Ihre Einrückung aussieht, gehört diese 'else'-Klausel eigentlich zur 'for'-Anweisung ([was vollkommen legal ist]) (http://stackoverflow.com/questions/9979970/why-does-python-usee- else-for-for-while-loops)) - ist das was du beabsichtigst/wie sieht dein Code wirklich aus? –

+1

Vielleicht ist das Problem nicht in dieser Funktion. Ist es möglich, dass der letzte String zweimal in 'FWSM_ACLs' ist? – evergreen

+0

@evergreen das ist das erste, was ich überprüft habe. Es ist nur einmal da. LukasGraf Ich habe das getestet. Wenn die else-Klausel in die erste for-Schleife verschoben wird, wertet sie nur Zeilen aus, an denen Substitutionen vorgenommen werden müssen, und die allerletzte Zeile in den FWSM_ACLs. Ich muss durch FWSM_ACLs gehen, j mit i ersetzen, und auch die Zeile "wie es ist" anhängen, wenn keine Substitution gemacht wird. Ich frage mich, ob ich den richtigen Weg beurteile. Vielleicht sollte ich die Tupel stattdessen in die äußere for-Schleife verschieben und die Tupel-Liste standardmäßig zu einer leeren Liste machen, um den Fall zu erfassen, in dem keine Tupel für die Liste ausgewertet werden. –

Antwort

0

Benutzerfehler. Ich habe eine vorherige Funktion verwendet, um Eingaben für diese Funktion zu generieren. Lose definierte Regex sowie ein ACL-Name, der eine Teilmenge anderer ACL-Namen war, verursachten die doppelte Ausgabe.