% either takes a variable or a tuple whereas .format don't have these issues, for instance check this:
"hi there %s" % name
for your second doubt, I assume you're using logging module , then try this:
log.debug("some debug info: %s", some_info)
This will avoid all formatting unless your logger logs something.