[英]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.