#! 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

Reply via email to