String formatting strangeness
Larry Bates
lbates at syscononline.com
Fri May 13 09:38:06 EDT 2005
The argument to string format expression needs to be a tuple not a list.
Also, all the string escaping makes this very hard to read. You can
mix single and double quotes to achieve:
print '\t\t\t<section number="%i" title="%s" length="%i:%i"/>\n' % \
(number, name, seconds // 60, seconds % 60)
which IMHO is much easier to read.
Larry Bates
dark.ryder at gmail.com wrote:
> I must be doing something wrong, but for the life of me, I can't figure
> out what. Here's the code snippet which is giving me grief:
>
> print type(number), type(name), type(seconds // 60), type(seconds % 60)
> print "\t\t\t<section number=\"%i\" title=\"%s\" length=\"%i:%i\"/>\n"
> % [number, name, seconds // 60, seconds % 60]
>
> (These are lines 49 and 50 of the script; I can post the whole thing if
> someone wants, but I think this is enough to see why it's driving me
> nuts.)
>
> And the output:
>
> <type 'int'> <type 'str'> <type 'int'> <type 'int'>
> Traceback (most recent call last):
> File "X:\Music (FLAC)\Post-process new rips.py", line 50, in ?
> print "\t\t\t<section number=\"%i\" title=\"%s\"
> length=\"%i:%i\"/>\n" % [number, name, seconds // 60, seconds % 60]
> TypeError: int argument required
>
> Wait, what? The first line clearly identifies that the the first,
> third, and fourth elements are all integers, yet the error says that
> *lack* of integers is the problem. If I change all "%i"s to "%d", I
> get the same problem, and changing to "%s" (hey, it was worth a shot)
> gives "TypeError: not enough arguments for format string" instead.
> Huh? I see four placeholders and a four-element tuple.
>
> Can anyone enlighten me here?
>
More information about the Python-list
mailing list