python - 单项元组在for语句中抛出异常

时间:2011-10-02 10:06:02

标签: python exception dictionary

我很好奇为什么会这样。我使用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>

1 个答案:

答案 0 :(得分:5)

  

如果我在字典结束后放一个逗号,事情就开始了   再次。谁能解释一下发生了什么?

逗号制作元组。没有它,你只需要在括号中有一个值。

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

通常看起来括号是元组的符号,因为它们经常出现在一起。这只是因为出于语法原因,在编写元组时经常需要括号。

当你写links = ({ ... })时,你只有一本字典,而不是一个元组。 Python循环遍历它的键,因此每个link都是一个字符串,你尝试用另一个字符串索引,导致异常。