如何在mako中检查变量类型?

时间:2013-07-08 14:20:32

标签: python mako

我在mako模板中有一个嵌套的dicts字典,我试图遍历它们以打印出它们的密钥。

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

我遇到的问题是: " mydict中的营养成分['水果'] [水果]:"

TypeError:' int'对象不可迭代。

如何检查mydict [' fruits'] [fruit]是列表还是int?

1 个答案:

答案 0 :(得分:0)

通常,mydict['fruits']是字典,而您的fruit将是密钥。将mydict['fruits']fruit mydict['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代码中,而不是放在模板代码中。因为实际上,为什么营养素会产生整数?

另外,考虑更简单的迭代dict的方法(假设这在mako中有效):

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