#! rnews 2528 Newsgroups: comp.lang.python Path: news.xs4all.nl!newsspool.news.xs4all.nl!transit.news.xs4all.nl!news-spur1.maxwell.syr.edu!news.maxwell.syr.edu!nntp.abs.net!attws2!ip.att.net!NetNews1!xyzzy!nntp From: Harry George <[EMAIL PROTECTED]> Subject: Re: String formatting strangeness X-Nntp-Posting-Host: cola2.ca.boeing.com Content-Type: text/plain; charset=us-ascii Message-ID: <[EMAIL PROTECTED]> User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.4 Lines: 55 Sender: [EMAIL PROTECTED] Organization: The Boeing Company References: <[EMAIL PROTECTED]> Mime-Version: 1.0 Date: Fri, 13 May 2005 14:03:03 GMT Xref: news.xs4all.nl comp.lang.python:377190
[EMAIL PROTECTED] writes: > 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? > I notice you used a list instead of a tuple. Changing to a tuple gives the desired output: number=1 name="myname" seconds=250 print "\t\t\t<section number=\"%i\" title=\"%s\" length=\"%i:%i\"/>\n" \ % (number, name, seconds // 60, seconds % 60) <section number="1" title="myname" length="4:10"/> I have no idea why a list has that effect. PS: When writing XML and HTML, I use single quotes, so I don't have to escape double quotes: print '\t\t\t<section number="%i" title="%s" length="%i:%i"/>\n' \ % (number, name, seconds // 60, seconds % 60) -- [EMAIL PROTECTED] 6-6M21 BCA CompArch Design Engineering Phone: (425) 294-4718 -- http://mail.python.org/mailman/listinfo/python-list