----- Message from [EMAIL PROTECTED] ---------
    Date: Wed, 2 Jul 2008 16:49:19 +1200
    From: John Fouhy <[EMAIL PROTECTED]>


On 02/07/2008, Christopher Spears <[EMAIL PROTECTED]> wrote:
  File "point.py", line 13, in __str__
    point_str = "(%f,%f)" % self.x, self.y
 TypeError: not enough arguments for format string

Does anyone know what is wrong? I'm sure it is something obvious, but I can't see it.

Hi Christopher,

Here's the short answer: You need to put brackets around "self.x, self.y"
i.e.     point_str = "(%f,%f)" % (self.x, self.y)

The long answer: Python interprets the statement "point_str =
"(%f,%f)" % self.x, self.y" as "point_str = ("(%f,%f)" % self.x),
self.y".  There are two "%f" expressions in the string, but you only
supplied one argument, self.x.  Thus python tells you that there
aren't enough arguments.  To deal with this, you need to supply the
arguments as a tuple.


Hi all,

While it is true that you need to put parenthesis around the arguments, it isn`t quite the case that they are needed so as to provide the arguments as a tuple:

a = 42, 42
type(a)
<type 'tuple'>


It is the comma, not the parens that make for a tuple. My guess is that the parens are needed to disambiguate the end of the arguments as the comma can also indicate that another element is to be printed on the same line:

print '%s' %42 , 333
42 333


In a case like

print '%s%s' %42 , 333
...
TypeError: not enough arguments for format string

it would be ambiguous whether 333 was intended as a second formatting argument or as a second thing to be printed.

Best,

Brian vdB
_______________________________________________
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor

Reply via email to