Repository navigation
maxcolwidths isn't properly respected: extra whitespace is added #354
Copy link
Copy link
Labels
breaking changesbugSomething isn't workingSomething isn't workingenhancementNew feature or requestNew feature or request
Milestone
Description
Testcase:
from tabulate import tabulate
headers = ['Header#1', 'Header#2', 'Header#3']
data = []
data.append(['Alpha beta gama zeta omega', 'The weather was exceptionally good that day again', 'The files were concatenated and archived for posterity.'])
data.append(['Delta omega beta alpha nu and the rest', 'The weather was exceptionally good that day', 'They decided to engage in many businesses and all of them were successful.'])
print(tabulate(
data,
headers=headers,
tablefmt='fancy_grid',
maxcolwidths=[None, None, 8]))
The output:
╒════════════════════════════════════════╤═══════════════════════════════════════════════════╤════════════╕
│ Header#1 │ Header#2 │ Header#3 │
╞════════════════════════════════════════╪═══════════════════════════════════════════════════╪════════════╡
│ Alpha beta gama zeta omega │ The weather was exceptionally good that day again │ The │
│ │ │ files │
│ │ │ were con │
│ │ │ catenate │
│ │ │ d and │
│ │ │ archived │
│ │ │ for post │
│ │ │ erity. │
├────────────────────────────────────────┼───────────────────────────────────────────────────┼────────────┤
│ Delta omega beta alpha nu and the rest │ The weather was exceptionally good that day │ They │
│ │ │ decided │
│ │ │ to │
│ │ │ engage │
│ │ │ in many │
│ │ │ business │
│ │ │ es and │
│ │ │ all of │
│ │ │ them │
│ │ │ were suc │
│ │ │ cessful. │
╘════════════════════════════════════════╧═══════════════════════════════════════════════════╧════════════╛
The last column in the output has 2 extra spaces.
The data was wrapped at the requested column width of 8, but then 2 extra spaces were added.
This is important because maxcolwidths can be (and is in my case) calculated based on the actual terminal width, and adding extra space makes the table to overflow the terminal.
Version: 0.9.0
Python 3.11 (3.9 works the same way)
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
breaking changesbugSomething isn't workingSomething isn't workingenhancementNew feature or requestNew feature or request
Activity
[-]maxcolwidths isn't properly respected: extra whitespace is left[/-][+]maxcolwidths isn't properly respected: extra whitespace is added[/+]Zeroed padding when maxcolwidths/maxheadercolwidths (Fixes astanin#354)
Revert "Zeroed padding when maxcolwidths/maxheadercolwidths (Fixes as…
astanin commentedon Mar 5, 2026
I can confirm that the issue is still present in v0.10.0.
Line breaks are consistent with how Python textwrap.wrap works. 2 margin spaces are added by the grid format. And there are two extra spaces after "catenate", which is already 8 characters long.
astanin commentedon Mar 5, 2026
On further test, the additional space comes from the long header. With a shorter header, everything is fine.
I suspect, that additional padding is added twice to the value in the row headers. Once, in
tabulatefunction, and the other time in_format_table. In your example the header happens to be exactly the width of the column, and padding offancy_gridis 1 space on both sides. So, instead of adding 2, the library added 2 + 2.astanin commentedon Mar 5, 2026
A shorter repro example:
astanin commentedon Mar 10, 2026
Properly fixing it would change the output of most of the tabulate formats, so it's a breaking change.
I'm changing milestone to v1.0.0.