2017-01-20 16 views
0

これは、私が取り組んでいるログパーサー用のコード断片です。ログ・パーサーはブレード・シャーシ用で、複数のブレード・サーバーを収容します。オブジェクトのリストを反復してクラス属性を割り当てよう

blade_populateのループのための()から、私は次のエラーを取得しています:

このオブジェクトを通して反復処理するための正しい方法だろう何

「期待タイプ積分がどれを持っていません」リストには、後でiDRACなどのPythonにファームウェアを移植することができますか?

def blade_create(): 
    blades= [] 
    for servers in range(blade_count()): 
     blades.append(servers) 
     return blades 

blades = blade_create() 

# Parse log to obtain FW revisions for blades 

def blade_populate(): 

    for blade in range(blades): 
     drac = log.readline() 
+1

最初の関数の 'return'ステートメントは本当にループ内でインデントされていますか?それはおそらくあなたが望むものかもしれないようには思われません。インデントしないと、 'blade_count()'が '0'を返しても、常にリストを返します。しかし、ループを使って自分でリストを作成するのではなく、単に 'range(blade_count())'を返すことができます。 – Blckknght

+0

それはそれだったし、私のエラーはクリアされた。私は衰えた。電話をありがとう! 編集:私はあなたの答えにクレジットを与えることはできません、何らかの理由で、私のステータスのためかもしれません。 – Dylan

+0

コメントであるため、受け入れられませんでした(スタックオーバーフローや実際の問題にコードをコピーするのは間違っていました)。私はそれを以下の答えに拡大しました。 – Blckknght

答えて

0

あなたは間違いがあると思われます。関数内のreturnステートメントはループ内にあります。つまり、ループが最初の繰り返しを実行したときにヒットするか、またはループがまったく実行されない場合(範囲が空であるため)、return(Pythonではreturn Noneを実行するのと同じです)はありません。それを修正する

return文の1つのレベルインデント解除:必要が変更できるように場合、私はそれに巻き付けおそらくlist(...)で(あなたのblade_create()関数はrange(blade_count())と同等であることに注意してくださいしたい

def blade_create(): 
    blades= [] 
    for servers in range(blade_count()): 
     blades.append(servers) 
    return blades        # unindent here! 

blades = blade_create() 

# Parse log to obtain FW revisions for blades 

def blade_populate(): 
    for blade in blades:  # this line shouldn't use range if blades is a list 
     drac = log.readline() 

を結果は後で)。あなたはそれのために別個の機能を必要としないかもしれません。

関連する問題