使用`str.format`函数但不使用%s语法时的键错误

时间:2013-10-24 04:29:47

标签: python string format string-formatting

使用python 2.7.4和3.3.1:

from textwrap import dedent as dd


name='Maruja'

print(dd('''
         {0}:
           _.-.
         '( ^{_}    (
           `~\`-----'\\
              )_)---)_)
         '''.format(name)))

这两者都是一个关键错误:

$ python3 test.py    # or python2 test.py
Traceback (most recent call last):
  File "test.py", line 9, in <module>
    '''.format(name)))
KeyError: '_'

使用%运算符可以运行:

from textwrap import dedent as dd


name ='Maruja'

print(dd('''
         %s:
           _.-.
         '( ^{_}    (
           `~\`-----'\\
              )_)---)_)
         ''' % name))

没错,但为什么?

$ python3 test2.py    # or python2 test2.py
Maruja:
  _.-.
'( ^{_}    (
  `~\`-----'\
     )_)---)_)

我一直无法弄清楚为什么会发生这种情况,而且我已经在几个环境中进行了测试,它有什么问题?

1 个答案:

答案 0 :(得分:5)

format方法也将{_}视为命名占位符之一,并期望键_具有键:值对。由于找不到匹配项,因此KeyError: '_'

失败