2013-07-08 71 views
0

我有一個mako模板中的字典嵌套字典,我試圖通過它們循環打印出他們的密鑰。如何檢查mako中的變量類型?

%for fruit in mydict['fruits']: 
    ${fruit} 
    % for nutrition in mydict['fruits'][fruit]: 
     ${nutrition} 
    % endfor 
%endfor 

我遇到的問題是與線: 「%用於mydict營養[ '水果'] [水果]:」

類型錯誤: '詮釋' 對象不是可迭代。

如何檢查mydict ['fruits'] [fruit]是列表還是int?

+0

是否有真子的方式來檢查,如果對象是一個字典或對象? – Rolando

+0

你可以發佈你的'mydict'數據結構嗎? – dm03514

回答

0

通常,mydict['fruits']是一本字典,您的fruit將是關鍵。索引mydict['fruits']fruitmydict['fruits'][fruit]將導致獲得單個項目,顯然,這是一個整數,而不是營養列表。爲什麼它是一個整數,是在你的代碼中的其他地方引起的。

>>> for fruit in mydict['fruits']: 
... print fruit, mydict['fruits'][fruit] 
... for nutrition in mydict['fruits'][fruit]: 
...  print nutrition 
... 
kiwi 2 
Traceback (most recent call last): 
    File "<stdin>", line 3, in <module> 
TypeError: 'int' object is not iterable 

更新

(令人困惑的是,這個問題改變,因此我的回答需要更新。)

你可以使用isinstance(mydict['fruits'][fruit], list)和變型。

或許更好,確保事情總是一個清單;即將類型檢查邏輯放在Python代碼中,而不是放在模板代碼中。因爲實際上,爲什麼一個整數由營養物質?

此外,也可以考慮通過迭代字典的簡單的方法(假設這部作品在鯖):

>>> for fruit, nutritions in mydict['fruits'].items(): 
...  if isinstance(nutritions, list): 
...  for nutrition in nutritions: 
...   print nutrition 
相關問題