テキストフォーマットエラー: '='は文字列フォーマット指定子では使用できません

2016-03-16 8 views
11

'=' 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"は、テキストではない数です。しかし、エラーメッセージはそれと関係がないようです。 「『=』アライメントは」、 関連性があるとそれがコードに表示されない理由をエラーメッセージで

何も示していません。では、そのエラーメッセージを出す意義は何ですか?

答えて

18

をエラーメッセージが表示されます。

Preceding the width field by a zero ('0') character enables sign-aware zero-padding for numeric types. This is equivalent to a fill character of '0' with an alignment type of '='.

だから、「N幅にゼロパディング」として0Nを指定することによって、あなたが入力されると、「両方暗示している:

str.format​​パーサは、「=」ので アライメント指定子に決定しました数値タイプ "、および" 0は符号と数字との間になければなりません "。後者の意味は、'=' alignmentの意味です。

"1"が数値ではないので、「=」 - 配向処理コードは、例外が発生します。このメッセージはあなたが "="アラインメントを(意味合いによって)要求したために、あなたが何を話しているかを知っていることを期待して書かれています。

はい、エラーメッセージを改善する必要があると思います。私はraised an issue for thatです。

-1

このフォーマットは

"{num}:03".format(num="1") 

受け入れられるだろうが、あなたは{num:03}をプレースホルダを指定した方法ではありません。これは面白いValueErrorですが、:を削除すると面白いエラーが標準KeyErrorに置き換えられます。

+0

これはOPが意図していたものではありません。彼らは、 'format'を使って埋め込まれた文字列を左揃えにしたいと思っています。 –

+0

ああ、私は今参照してください。それは理にかなっています。 – pholtz

3

str.__format__あなた03部分をどのように処理するかを知りません。数字のみで動作していること:

>>> "{num:03}".format(num=1) 
'001' 

あなたが実際にゼロパッドに文字列をしたい場合は、あなたがrjustを使用することができます。'=' alignmentは書式指定子によって暗示されているため

>>> "1".rjust(3, "0") 
'001' 
0

float - > 3.44が必要な場所に 'string - >' 1 'を挿入しようとしています。引用符を削除し、「1」、すなわちNUM = 1、それは

4

回避策は構文である'>'(右詰め)詰め物、使用することです動作します。整列は>であるとして

[[fill]align][width] 

を記入は0です。

スペースにデフォルト値を入力します。

>>> "{num:0>3}".format(num="1") 
'001' 

問題は、それが文字列の兆候はありません

Forces the padding to be placed after the sign (if any) but before the digits. This is used for printing fields in the form ‘+000000120’. This alignment option is only valid for numeric types. It becomes the default when ‘0’ immediately precedes the field width.

Source (Python 3 docs)

を意味し=にデフォルトを揃えました。また、手動で整列を指定し、構文を使用することができます。

[align]0[width] 
>>> "{num:>03}".format(num="1") 
'001' 

にも注意してください:同じロジックで動作しますが、整列が左詰めされているため

>>> "{num:^03} {num:<03}".format(num="1") 
'010 100' 

<)とセンター(^

関連する問題