【问题标题】:python - single item tuple throws exception in for statementpython - 单项元组在for语句中引发异常
【发布时间】:2011-11-29 08:34:11
【问题描述】:

我很好奇为什么会发生这种情况。我使用 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 模板 sn-p

<nav>

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

      </nav>

【问题讨论】:

  • 您能展示一下 Mako 模板的外观吗?迭代代码是怎么写出来的?
  • @jochenritzel 做到了。不过,您也可以显式使用 tuple() 内置函数来避免隐式语法怪癖。 docs.python.org/tutorial/…

标签: python exception dictionary


【解决方案1】:

如果我在字典末尾加上逗号,事情就开始起作用了 再次。谁能解释一下是怎么回事?

逗号构成元组。没有它,括号中只有一个值。

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

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

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

【讨论】:

    猜你喜欢
    • 2016-08-18
    • 1970-01-01
    • 2022-08-19
    • 1970-01-01
    • 2018-03-15
    • 2014-01-25
    • 2014-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多