2016-05-31 9 views
0

使用して私は、機能の背後にある繰り返し付加するため、他のループ

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 

アイデアはタプルのリストと、引数として文字列のリストを取ることです機能を持っています。タプルには、実際のアドレスからマッピングされたアドレスへのマッピングが含まれます。マッピングされたアドレスがリストの文字列に含まれている場合は、実際のアドレスに置き換えられます。

作成中の新しいリストには、文字列のリストの最後の行が2回追加されます。 print文を追加する関数を実行すると、リストの最後のタプルが2回評価されるように見えます。

別のif文をelse節に追加することで問題を回避できますが、どこが間違っているのか理解したいと思います。どんな支援も大歓迎です!

+2

あなたのインデントがどのように見えるのか、 'else'節は実際には' for'ステートメントに属しています(これは完全に正当です)(http://stackoverflow.com/questions/9979970/why-does-python-use- else-for-for-while-while-loops)) - あなたが意図したもの/実際にコードがどのように見えるのでしょうか? –

+1

問題はこの機能ではないかもしれません。最後の文字列が実際に 'FWSM_ACLs'に2回ある可能性はありますか? – evergreen

+0

@evergreenそれが私がチェックした最初のものです。それは一度しかありません。 LukasGraf私はこれをテストしました。 else節が最初のforループに移動された場合、置換が必要な行とFWSM_ACLの最後の行だけが評価されます。私はFWSM_ACLsを通過し、jをiに置き換える必要があります。また、置換が行われていない場合は、 "そのまま"という行を追加する必要があります。 私は正しい方法を評価しているのだろうかと思います。たぶん私はタプルを代わりにforループの代わりに移動し、リストに対して評価するタプルがない場合をキャッチするためにタプルリストをデフォルトで空のリストにする必要があります。 –

答えて

0

ユーザーエラーです。この関数の入力を生成するために以前の関数を使用しました。緩やかに定義された正規表現に加えて、他のACL名のサブセットであるACL名が重複出力を引き起こしました。

関連する問題