New submission from Xiang Zhang <angwe...@126.com>:

I'm somewhat surprised when I have code like `"hello %s".format(person)` in my 
project there is no exception raised and "hello %s" returned. Have several 
tries it seems `str.format` won't check argument number.

>>> '{} {}'.format(1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: tuple index out of range
>>> '{} {}'.format(1, 2, 3)
'1 2'
>>> ''.format(1, 2, 3)
''
>>>

The IndexError is not ideal. I think this behavior could be improved since it's 
highly possible such code is an oversight bug. The old format string does a 
good job in this place:

>>> "%s %s" % 1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: not enough arguments for format string
>>> "%s %s" % (1,2,3)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: not all arguments converted during string formatting
>>> "" % 1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: not all arguments converted during string formatting

----------
components: Interpreter Core
messages: 317859
nosy: xiang.zhang
priority: normal
severity: normal
status: open
title: str.format should raise exception when placeholder number doesn't match 
argument number
type: behavior
versions: Python 3.8

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue33669>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to