[Tutor] What does "TypeError: 'int' object is not iterable" mean?

Lie Ryan lie.1296 at gmail.com
Sun Oct 24 17:33:55 CEST 2010

On 10/23/10 01:19, David Hutto wrote:
> If I understand what i just said correctly, it just means it tells the
> string what type to convert from when placing it into the final
> result.

basically, when doing this %-interpolation, python does this:

    ("NEW LOW: %%.%sf at %%s" % i) % (lowz, timestamp)

do the first interpolation:

    "NEW LOW: %%.%sf at %%s" % i

it's to be noted that %% is replaced by a single %, and %s is replaced
by the right argument of %, so if i == 5 it now becomes:

    "NEW LOW: %.5sf at %s" % (lowz, timestamp)

and now do the second interpolation, lowz is formatted with %.5f which
means a floating value (f) with 5 decimal place, and timestamp is
inserted in place of %s; so if you have lowz = 81.345678901234 and
timestamp = "last year":

    "NEW LOW: 81.34567 at last year"

However, as Steven noted, the complex, 2-phase interpolation can be
simplified using the '*' decimal place specifier:

    ("NEW LOW: %%.%sf at %%s" % i) % (lowz, timestamp)
    # is equivalent with:
    "NEW LOW: %.*f at %s" % (i, lowz, timestamp)

and Steven also remarked that now the interpolation is so simple, there
is very little benefit in separating it into a different function.

More information about the Tutor mailing list