[Python-3000] str.format vs. string.Formatter exceptions (original) (raw)
Ron Adam rrr at ronadam.com
Tue Sep 4 04:38:22 CEST 2007
- Previous message: [Python-3000] str.format vs. string.Formatter exceptions
- Next message: [Python-3000] str.format vs. string.Formatter exceptions
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Eric Smith wrote:
Ron Adam points out some differences in which exceptions are thrown by str.format and string.Formatter. For example, on a missing positional argument:
>>> "{0}".format() Traceback (most recent call last): File "", line 1, in ValueError: Not enough positional arguments in format string >>> Formatter().format("{0}") Traceback (most recent call last): File "", line 1, in File "/shared/src/python/py3k/Lib/string.py", line 201, in format return self.vformat(formatstring, args, kwargs) File "/shared/src/python/py3k/Lib/string.py", line 220, in vformat obj, argused = self.getfield(fieldname, args, kwargs) File "/shared/src/python/py3k/Lib/string.py", line 278, in getfield obj = self.getvalue(first, args, kwargs) File "/shared/src/python/py3k/Lib/string.py", line 235, in getvalue return args[key] IndexError: tuple index out of range The PEP says: In general, exceptions generated by the formatter code itself are of the "ValueError" variety -- there is an error in the actual "value" of the format string.
The PEP also says the following in regards to this...
+---------------- Implementation note: The implementation of this proposal is not required to enforce the rule about a name being a valid Python identifier. Instead, it will rely on the getattr function of the underlying object to throw an exception if the identifier is not legal. The str.format() function will have a minimalist parser which only attempts to figure out when it is "done" with an identifier (by finding a '.' or a ']', or '}', etc.). +----------------
If these return ValueErrors, as I think it has been suggested in the earlier messages, then this will need to be updated as well.
_RON
I can easily change string.Formatter to make this a ValueError, and I think that's probably the right thing to do. For example, if the string comes from a translation module, then there might be an extra parameter added by mistake, in which case ValueError seems right to me.
But I'd like to hear if anyone else thinks this should be an IndexError, or maybe they both should be some other exception. Similarly "{x}".format()' currently raises ValueError, but 'Formatter().format("{x}")' raises KeyError.
Python-3000 mailing list Python-3000 at python.org http://mail.python.org/mailman/listinfo/python-3000 Unsubscribe: http://mail.python.org/mailman/options/python-3000/rrr%40ronadam.com
- Previous message: [Python-3000] str.format vs. string.Formatter exceptions
- Next message: [Python-3000] str.format vs. string.Formatter exceptions
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]