'how to get around "Single '}' encountered in format string" when using .format and formatting in printing

I am currently trying to print a tabulated format (using left alignment and padding) for headings in a table however I keep getting the following error.

ValueError: Single '}' encountered in format string

Here's the line:

print("{0}:<15}{1}:<15}{2}:<8}".format("1", "2", "3"))

Required output is something along the lines of:

1              2              3        

I've tried duplicating the { } as advised here but received no luck.

I am probably missing something incredibly obvious however after staring at it for ages, I cannot see it. After all, what's the harm in asking?

Thanks



Solution 1:[1]

Works:

>>> print("{0}:<15}}{1}:<15}}{2}:<8}}".format("1", "2", "3"))
1:<15}2:<15}3:<8}

Edit: Now I understand you. Do this:

print("{0:<15}{1:<15}{2:<8}".format("1", "2", "3"))

Details: http://www.python.org/dev/peps/pep-3101/

Solution 2:[2]

Use }}:

>>> "{0}:<15}}{1}:<15}}{2}:<8}}".format("1", "2", "3")
'1:<15}2:<15}3:<8}'

Solution 3:[3]

The { and } characters need to be escaped where they're not part of the formatting template.

Try: print("{0}:<15}}{1}:<15}}{2}:<8}}".format("1", "2", "3"))

Outputs: 1:<15}2:<15}3:<8}

Solution 4:[4]

You can also use Variables to do that. lenmax = the max number of space needed, and op = the var i want to format with (both vars need to be set first)

print(('{:>' + str(lenmax) + '}').format(op), end='\t\t')

Things to remember:

  • Parenthesis can be used.
  • you can't concat ints so the var on the string must be transformed.
  • the end statement gives you Tab so you don't have linejumps

hope works for someone.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Shadow Wizard Says No More War
Solution 2 Fred Foo
Solution 3 WaffleSouffle
Solution 4