2017-12-26 25 views
-2
#!/usr/bin/python 

from mininet.topo import Topo 
from mininet.net import Mininet 
from mininet.link import Link 
from mininet.log import setLogLevel, info 
from mininet.cli import CLI 

class myNetwork(Topo): 
"three users connected to cloud" 

def build(self, **_opts): 
    #create switch 
    s1 = \ 
    [ self.addSwitch for s in 's1' ] 
    #create hosts 
    h1, h2, h3 = \ 
    [ self.addHosts for h in 'h1', 'h2', 'h3' ] 
    #create links 
    [for h,s in [(h1,s1), (h2,s1), (h3,s1)]: self.addLink(h,s) 

def run(): 
topo = myNetwork() 
net = Mininet(topo=topo) 
net.start() 
CLI(net) 
net.stop() 

if __name__=='__main__': 
setLogLevel('info') 
run() 

에서 파이썬 스크립트를 실행 '목록'오류가 나는 오류 이 문제를 조사하려고 시도했는데 오류의 의미를 이해하지만 왜 Python 스크립트를 실행할 때이 오류가 발생하는지 정확히 알지 못합니다.Unhashable 유형 :</p> <p>Unhashable 유형 : '목록'</p> <p>나는 내가 mininet 내 파이썬 스크립트를 실행하려고하면 mininet

+1

'self.addSwitch for s1 ''' what? 목록 작성을 마스터하지 않으면 사용하지 마십시오. –

답변

1

List Comprehensions의 작동 방식에 다소 혼란스러워 보입니다.

[for h,s in [(h1,s1), (h2,s1), (h3,s1)]: self.addLink(h,s) 
: 당신은

[ self.addSwitch for s in s1 ] 
# notice the lack of quotes around s1, this means we want the VAR not the string 

대신 또한

[ self.addSwitch for s in 's1' ] 

의, 내가이 생각하지 않는 한이 라인에서 [을 제거 잊어 버린 수있는 일을하려고 할 수있는 것은 올바른 구문입니다

에 :

for h,s in [(h1,s1), (h2,s1), (h3,s1)]: self.addLink(h,s) 

다음은 목록 이해력에 대한 몇 가지 예입니다.

l = [1, 2, 3, 4] 

l_modified = [i+1 for i in l] # [2, 3, 4, 5] 

a = "String" 
a_list = [c for c in a] # ["S", "t", "r", "i", "n", "g"] 

b = [c.upper() for c in "hello"] # ["H", "E", "L", "L", "O"]