How to compare Python string formatting: % with .format?

Python provides two main approaches for string formatting: the older % formatting (printf-style) and the newer .format() method. Understanding their differences helps you choose the right approach for your code.

% Formatting Issues

The % operator can take either a variable or a tuple, which creates potential confusion. Here's a common pitfall ?

my_tuple = (1, 2, 3)
try:
    result = "My tuple: %s" % my_tuple
    print(result)
except TypeError as e:
    print(f"Error: {e}")
Error: not enough arguments for format string

This fails because Python tries to use each tuple element as a separate format argument. To fix this, you must wrap the tuple in another tuple ?

my_tuple = (1, 2, 3)
result = "My tuple: %s" % (my_tuple,)  # Note the comma!
print(result)
My tuple: (1, 2, 3)

The .format() Method

The .format() method handles arguments more predictably and offers cleaner syntax ?

my_tuple = (1, 2, 3)
name = "Alice"

# No tuple wrapping needed
result1 = "My tuple: {}".format(my_tuple)
print(result1)

# Named placeholders
result2 = "Hello {name}, your data: {data}".format(name=name, data=my_tuple)
print(result2)
My tuple: (1, 2, 3)
Hello Alice, your data: (1, 2, 3)

Comparison

Feature % Formatting .format() Method
Syntax "Hello %s" % name "Hello {}".format(name)
Multiple args "Hello %s %s" % (a, b) "Hello {} {}".format(a, b)
Named args "Hello %(name)s" % {"name": "Alice"} "Hello {name}".format(name="Alice")
Tuple handling Requires (tuple,) wrapping Handles naturally

Conclusion

While % formatting is still widely used, .format() offers cleaner syntax and fewer gotchas. Modern Python also supports f-strings (f"Hello {name}") as the most readable option.

Updated on: 2026-03-24T19:23:53+05:30

300 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements