Python 字符串 replacement_field 中不允许使用 int 变量?

No int variables allowed in Python string replacement_field?

我正在尝试将 str.format() 用于具有可变宽度的报告 headers(即列),但我似乎无法使用 int 变量来做到这一点:

hlist =['h1','h2','h3','h4']
width = 7

for i in range(len(hlist)):
    # print(hlist[i].center(width), end='  ')       # this works
    print('{:^width}'.format(hlist[i]), end='  ')   # this doesn't
print()

for i in range(len(hlist)):
    # print('------'.center(width), end='  ')       # this works
    print('{:-<width}'.format('-'), end='  ')       # this doesn't
print()

运行 这段代码给我:

ValueError: Invalid format specifier

使用任何 int 文字代替 width 都可以正常工作。我研究了 here,我认为我已经接近 format_spec arg,但看起来它只支持 non-integer 格式。我也尝试了 int(),但没有成功。

我对使用 byte.center() 的解决方案很满意,但我一直在寻找一种方法来使用更新的语法以获得更大的灵活性。

如有任何帮助,我们将不胜感激!

您必须将宽度作为变量传递给格式函数,并让它知道您需要一个名为 width 的变量,而不是文字字符串。由于大括号可以嵌套,所以这样做:

hlist =['h1','h2','h3','h4']
width = 7

for i in range(len(hlist)):
    print('{:^{width}}'.format(hlist[i], width=width), end='  ')
print()

for i in range(len(hlist)):
    print('{:-<{width}}'.format('-', width=width), end='  ')
print()