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

ric*_*lla 0 python dictionary exception

我很好奇为什么会这样.我使用Mako模板迭代一个元组,其中包含许多字典,而这些字典又包含链接信息:

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

如果我将上述内容发送到视图,一切都按预期工作,将显示链接.如果我删除第二个链接但是:

links = (
            {
                'path' : request.route_url('home'),
                'text' : 'Home'
            }
)
Run Code Online (Sandbox Code Playgroud)

我得到一个例外: TypeError: string indices must be integers, not str

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

编辑 Mako模板片段

<nav>

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

      </nav>
Run Code Online (Sandbox Code Playgroud)

Joc*_*zel 5

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

逗号使得元组.没有它你只需要在括号中有一个值.

x = ({}) # brackets around a dict
x = {}, # a 1-tuple
x = ({},) # a 1-tuple in brackets
Run Code Online (Sandbox Code Playgroud)

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

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