On 2/19/2017 4:23 AM, Pavol Lisy wrote:
On 2/19/17, Eric V. Smith <e...@trueblade.com> wrote:
On 2/18/2017 2:25 AM, Steven D'Aprano wrote:
I see three problems:
(1) It will be a bug magnet. People will accidently write
logging.debug('%03d %C03d', 1, expensive())
and then not only will their code still be slow, but they'll have to
debug mysterious
TypeError: 'int' object is not callable
exceptions, but only *sometimes*. Most insideously, these Heisenbugs
will only occur when they turn the log level all the way up to
debugging, which will crash their program *before* logging the error!
I think this is lessened with my proposal to use !c, but it's definitely
still an issue. Test your logging!
1. I think that error message could be understandable at least as this:
'{:g}'.format('a')
ValueError: Unknown format code 'g' for object of type 'str'
with something like isinstance(arg, callable)
Sure, there would be a reasonable error message. The concern (as with
logging anything), is that the error case logging is typically poorly
tested.
2. Static checker could check bracket presence if there is !c format
specifier and fire warning.
But it's valid to have a function that returns a callable, so these
could be false positives. But linters can do whatever they want, I guess.
3. There could be another problem if return type is callable too...
I don't think that's a problem. You'd just print the callable, as you
can do today:
>>> def fn(): pass
...
>>> format(fn, '')
'<function fn at 0xffee6108>'
_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/