2011-10-02 63 views
0

我好奇爲什麼會發生這種情況。用真子模板來遍歷一個元組IM,一個包含若干個字典數的,那又包含鏈接信息:蟒蛇 - 單項元組拋出for語句的異常

links = (
     { 
      'path' : request.route_url('home'), 
      'text' : 'Home' 
     }, 
     { 
      'path' : "http://www.microsoft.com", 
      'text' : "Microsoft" 
     } 
    ) 

如果我發送上面的觀點,一切正常,該鏈接顯示。如果我刪除但是第二個鏈接:

links = (
      { 
       'path' : request.route_url('home'), 
       'text' : 'Home' 
      } 
) 

我得到一個異常:TypeError: string indices must be integers, not str

,如果我把一個逗號字典結束後,事情開始工作。任何人都可以解釋發生了什麼?

編輯 Mako的模板片斷

<nav> 

     % for link in links: 
     <a href="${link['path']}">${link['text']}</a> 
     % endfor 

     </nav> 
+0

你能展示Mako模板的外觀嗎?如何寫出迭代代碼? –

+0

@jochenritzel釘了它。儘管如此,你也可以明確地使用'tuple()'內建來避免隱含的語法怪癖。 http://docs.python.org/tutorial/datastructures.html#tuples-and-sequences –

回答

5

,如果我把一個逗號字典結束後,事情開始工作 。任何人都可以解釋發生了什麼?

逗號構成元組。沒有它,你只需在括號中有一個單一的值。

x = ({}) # brackets around a dict 
x = {}, # a 1-tuple 
x = ({},) # a 1-tuple in brackets 

通常看來括號是元組的符號,因爲它們經常出現在一起。這只是因爲出於語法原因,編寫元組時通常需要括號。

當你寫links = ({ ... })你只有一個字典,而不是一個元組。 Python循環它的鍵,因此每個link都是一個字符串,您嘗試通過另一個字符串進行索引,導致異常。