Lazy evaluation of strings in python logging: comparing `%` with `.format`
·
Answer a question
Is there any difference between these two calls:
import logging
logging.getLogger().debug('test: %i' % 42)
and
logging.getLogger().debug('test: {}'.format(42))
Where we assume 42 is replaced by some long computation (say 7.5 million years of computation) when it is cast to a string that produces a final answer of 42.
Is the first approach lazily evaluated in case logging is set to debug?
Answers
Neither are lazy. Both strings are interpolated before sent to logger. Lazy evaluation in terms of python logging is done with separate arguments. The documentation https://docs.python.org/2/library/logging.html suggest the following for lazy evaluation of string interpolation;
logging.getLogger().debug('test: %i', 42)
TL;DR In this case it’s easier to consider the following. We sent a primitive type (string) but only one argument to the logger. Thus it can’t be lazy.
更多推荐

所有评论(0)