[英]Text formatting error: '=' alignment not allowed in string format specifier
'=' alignment
在以下错误消息中是什么意思,为什么这段代码会导致它?
>>> "{num:03}".format(num="1")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: '=' alignment not allowed in string format specifier
该代码有一个微妙的问题:输入值"1"
是文本,而不是数字。 但错误消息似乎与此无关。
错误消息中没有任何内容表明为什么“'='对齐”是相关的,并且它没有出现在代码中。 那么发出该错误消息有什么意义呢?
一种解决方法是使用'>'
(右对齐)填充,其语法如下:
[[fill]align][width]
对齐为>
,填充为0
,宽度为3
。
>>> "{num:0>3}".format(num="1")
'001'
问题是格式规范中有一个不同的0
:
format_spec ::= [[fill]align][sign][#][0][width][grouping_option][.precision][type] # ^^^ This one
该零只是使fill
默认为0
并align
到=
。
=
对齐方式指定为:
强制将填充放置在符号(如果有)之后但在数字之前。 这用于以“+000000120”形式打印字段。 此对齐选项仅对数字类型有效。 当 '0' 紧跟在字段宽度之前时,它成为默认值。
这期望参数是int
,因为字符串没有符号。 所以我们只是手动将其设置为正常默认值>
(右对齐)。
另请注意, 0
仅指定fill
和align
的默认值。 您可以更改两者或仅更改对齐方式。
>>> # fill defaults to '0', align is '>', `0` is set, width is `3`
>>> "{num:>03}".format(num=-1)
'0-1'
>>> # fill is `x`, align is '>', `0` is set (but does nothing), width is `"3"`
>>> "{num:x>03}".format(num=-1)
'x-1'
>>> # fill is `x`, align is '>', `0` is set (but does nothing), width is `"03"` (3)
>>> "{num:x>003}".format(num=-1)
'x-1'
str.__format__
不知道如何处理您的03
部分。 这只适用于数字:
>>> "{num:03}".format(num=1)
'001'
如果你真的想要零填充一个字符串,你可以使用rjust
:
>>> "1".rjust(3, "0")
'001'
就我而言,我试图用零填充字符串而不是数字。
解决方案只是在应用填充之前将文本转换为数字:
num_as_text = '23'
num_as_num = int(num_as_text)
padded_text = f'{num_as_num:03}'
您试图在需要浮点数-> 3.44 的地方插入 'string->"1" 。 去掉引号“1”,即num=1,就可以了
这种格式是可以接受的
"{num}:03".format(num="1")
但是您指定占位符的方式{num:03}
不是。 不过,这是一个有趣的 ValueError,如果您删除:
有趣的错误将被标准KeyError
替换。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.