【问题标题】:String formatting in Python version earlier than 2.6早于 2.6 的 Python 版本中的字符串格式
【发布时间】:2010-10-22 00:28:05
【问题描述】:

当我在 Python 2.5.2 中运行以下代码时:

for x in range(1, 11):
    print '{0:2d} {1:3d} {2:4d}'.format(x, x*x, x*x*x)

我明白了:

Traceback (most recent call last):
  File "<pyshell#9>", line 2, in <module>
    print '{0:2d} {1:3d} {2:4d}'.format(x, x*x, x*x*x)
AttributeError: 'str' object has no attribute 'format'

我不明白这个问题。

来自dir('hello') 没有format 属性。

我该如何解决这个问题?

【问题讨论】:

    标签: python format


    【解决方案1】:

    str.format 方法在 Python 2.6 及更高版本中是 introduced in Python 3.0, and backported

    【讨论】:

      【解决方案2】:

      您的示例代码似乎是为 Python 2.6 或更高版本编写的,其中the str.format method was introduced

      对于 2.6 以下的 Python 版本,使用 the % operator 将一系列值插入到格式字符串中:

      for x in range(1, 11):
          print '%2d %3d %4d' % (x, x*x, x*x*x)
      

      您还应该知道,此运算符可以通过映射中的 name 进行插值,而不仅仅是位置参数:

      >>> "%(foo)s %(bar)d" % {'bar': 42, 'foo': "spam", 'baz': None}
      'spam 42'
      

      结合内置的 vars() 函数将命名空间的属性作为映射返回,这非常方便:

      >>> bar = 42
      >>> foo = "spam"
      >>> baz = None
      >>> "%(foo)s %(bar)d" % vars()
      'spam 42'
      

      【讨论】:

      • 这是一个很好的描述,但它没有描述如何在给出的示例中实现格式化。
      • @JasonR.Coombs:谢谢,我现在将与给出的示例对应的代码作为答案中的第一个。
      【解决方案3】:

      我相信这是 Python 3.0 的一个特性,虽然它是在 2.6 版中。但是如果你的 Python 版本低于这个版本,那么这种类型的字符串格式化将不起作用。

      如果您通常尝试打印格式化字符串,请通过% 运算符使用 Python 的 printf 样式语法。例如:

      print '%.2f' % some_var
      

      【讨论】:

        【解决方案4】:

        您使用哪个 Python 版本?

        编辑 对于 Python 2.5,使用 "x = %s" % (x)(用于打印字符串)

        如果你想打印其他类型,see here

        【讨论】:

          【解决方案5】:

          虽然现有的答案描述了原因并指出了修复的方向,但它们实际上都没有提供解决问题的解决方案。

          您有两种选择来解决问题。首先是升级到Python 2.6或更高版本,支持format string construct

          第二个选项是使用older string formatting with the % operator。您提供的等效代码如下。

          for x in range(1,11):
            print '%2d %3d %4d' % (x, x*x, x*x*x)
          

          这段代码在 Python 2.5 中产生的输出与您的示例代码在 Python 2.6 及更高版本中产生的输出完全相同。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2013-03-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-05-13
            • 1970-01-01
            相关资源
            最近更新 更多