Steven D'Aprano <st...@remove-this-cybersource.com.au> writes: > Instead of just whinging, how about making a suggestion to fix it? Go on, > sit down for an hour or ten and try to work out how a BINARY OPERATOR > like % (that means it can only take TWO arguments) can deal with an > arbitrary number of arguments, *without* having any special cases. > > Go on. Take your time. I'll be waiting.
Well that's easy. I see 'r' didn't answer so I will: only accept tuples on the right hand side of the %, so all arguments have to be put inside a tuple. >>> "%s" % 42 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unsupported operand type(s) for %: 'str' and 'int' >>> "%s" % (42,) '42' Of course there would still be the possibility of uncaught bugs when people forget to put the argument in a tuple if the argument itself is a tuple of length 1. >>> def foo(x): ... print "foo(%s)" % x ... # should be % (x,) ... >>> foo('a') TypeError: unsupported operand type(s) for %: 'str' and 'str' >>> # But if x is a tuple of length 1 the error is not reported >>> foo((1,)) foo(1) That's why .format() is a better option IMHO. -- Arnaud -- http://mail.python.org/mailman/listinfo/python-list