2017-01-21 7 views
3

Ich wurde ein Python-Skript-Helper für mein Simulationsprojekt gegeben. Ich druckte eine Liste print event.connection.features.ports die wie folgt aussieht:Entpacken Sie einen Wert der unbekannten Liste

[port_no: 65534 
hw_addr: aa:20:20:40:f8:48 
name: s9 
config: 1 
state: 1 
curr: 0 
advertised: 0 
supported: 0 
peer: 0 

, port_no: 1 
hw_addr: 36:7c:47:6d:ba:8c 
name: s9-eth1 
config: 0 
state: 0 
curr: 192 
advertised: 0 
supported: 0 
peer: 0 
] 

Die Idee dabei ist, dass diese Liste eine seltsame Liste sieht für mich !! Ich weiß nicht einmal, wie man einen bestimmten Wert basierend auf einem Index extrahiert, da die Indizes hier nicht klar sind (ich nehme an, dass es hier nur zwei Indizes gibt, da Komma hier das Trennzeichen sein könnte). Mein gewünschter Wert zu extrahieren ist hw_addr basierend auf gegeben port_no. Zum Beispiel, wenn ich hw_addr von port 1 möchte, habe ich etwas wie port_no[1][1] versucht, aber das funktioniert nicht. Ich habe eine Schleife zu Schleife über diese Liste wie die folgenden:

for i in event.connection.features.ports: 
    if i.port_no == 1: 
     print i.port_no[1][1] 

Diese Schleife gibt diesen Fehler!

File "/home/ahmad/pox/pox/Latency_Monitor.py", line 57, in _handle_ConnectionUp 
    print m.port_no[1][1] 
TypeError: 'int' object has no attribute '__getitem__' 

Bitte, kann jemand einen Tipp geben? Danke

+1

Es sieht für mich so aus, weil jemand die '__repr__' Funktion auf den Elementen in der Liste definiert hat. Können Sie den Fehler angeben? –

+0

Ja! Ich werde den Beitrag mit dem Fehler aktualisieren. Danke Jungs – Don

+0

Die Überprüfung von 'type (i.port_no)' und 'dir (i)' kann helfen, die tatsächliche Struktur der Liste zu verstehen. – DyZ

Antwort

2

Ich denke, der Grund, während die Liste seltsam aussieht, ist, weil jemand die __repr__ Funktion definiert und so definiert, wie ein Element der Liste gegeben gedruckt wird gedruckt.

Ich versuchte etwas wie port_no[1][1].

Ich wäre überrascht, wenn das funktionierte. i.port_no ist, basierend auf der Tatsache, dass Ihre Tests erfolgreich waren, wahrscheinlich eine ganze Zahl. Was Sie wahrscheinlich anrufen müssen, ist i.hw_addr. Also sowas wie:

+0

RECHTS! Das hat funktioniert. Daran habe ich nicht gedacht. Vielen Dank, – Don

Verwandte Themen