我很好奇为什么会这样。我使用Mako模板迭代一个元组,其中包含许多字典,而这些字典又包含链接信息:
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 :(得分:5)
如果我在字典结束后放一个逗号,事情就开始了 再次。谁能解释一下发生了什么?
逗号制作元组。没有它,你只需要在括号中有一个值。
x = ({}) # brackets around a dict
x = {}, # a 1-tuple
x = ({},) # a 1-tuple in brackets
通常看起来括号是元组的符号,因为它们经常出现在一起。这只是因为出于语法原因,在编写元组时经常需要括号。
当你写links = ({ ... })
时,你只有一本字典,而不是一个元组。 Python循环遍历它的键,因此每个link
都是一个字符串,你尝试用另一个字符串索引,导致异常。