2017-01-20 8 views
0

Dies ist ein Code-Schnipsel für einen Protokollparser, an dem ich gerade arbeite. Der Protokollparser ist für ein Blade-Chassis ausgelegt und enthält mehrere Blade-Server.Iterieren durch eine Liste von Objekten zum Zuweisen eines Klassenattributs

Ich erhalte die folgende Fehlermeldung von der for-Schleife in blade_populate():

„erwartete Typ keine Integral bekommt“

Was den richtigen Weg wäre durch dieses Objekt iterieren Liste, damit ich später Python beginnen kann, Firmware, wie den iDRAC zu füllen?

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

Ist die 'return'-Anweisung in Ihrer ersten Funktion innerhalb der Schleife wirklich eingerückt? Das scheint nicht das zu sein, was du willst. Wenn Sie es rückgängig machen, werden Sie immer eine Liste zurückgeben, auch wenn 'blade_count()' '' 'zurückgibt. Aber Sie könnten stattdessen '' range (blade_count()) '' stattdessen zurückgeben, anstatt eine Liste selbst mit einer Schleife zu erstellen. – Blckknght

+0

Das war es, und mein Fehler wurde gelöscht. Ich habe mich geärgert. Danke für den Anruf! EDIT: Ich kann nicht Kredit für eine Antwort geben, aus irgendeinem Grund kann es wegen meines Status sein. – Dylan

+0

Sie können es nicht akzeptieren, weil es ein Kommentar ist (ich war mir nicht sicher, ob es ein Tippfehler war, der den Code auf Stack Overflow oder ein echtes Problem kopiert hat). Ich habe es unten in eine Antwort erweitert. – Blckknght

Antwort

0

Es sieht so aus, als ob Sie einen Indnationsfehler haben. Die return Anweisung in Ihrer Funktion befindet sich innerhalb der Schleife. Das bedeutet, dass es entweder getroffen wird, wenn die Schleife die erste Iteration ausführt, oder wenn die Schleife überhaupt nicht ausgeführt wird (weil der Bereich leer ist), tut es überhaupt nicht return (was in Python entspricht, return None zu tun).

es zu beheben, Unindent die return Aussage einer Ebene:

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() 

ich jedoch zur Kenntnis nehmen würde, dass Ihre blade_create() Funktion range(blade_count()) entspricht (mit vielleicht list(...) um ihn herum gewickelt, wenn Notwendigkeit der Lage sein, das zu ändern Ergebnis später). Es kann sein, dass Sie dafür keine separate Funktion benötigen.

Verwandte Themen