HOWTO · Python
TypeError を修正: Python で Object.__format__ に渡される空でないフォーマット文字列
このチュートリアルでは、TypeError: non-empty format string passed to object.__format__ の原因と、Python でこのエラーを解決する方法を示します。
このページの内容
Python の format() メソッドを使用すると、変数を置換してデータのフォーマットを実行できます。 このメソッドは、次以外の入力を処理するようには設計されていません。
sで表される文字列dで表される 10 進数fとして示されるフロートcで表される文字oとして示される 8 進数xで表される 16 進数bで表されるバイナリ- 指数は
eで表されます
他のデータ型がメソッドにアクセスすると、インタープリターは次のエラーを発生させます。
TypeError: non-empty format string passed to object.__format__
Python での TypeError: Non-Empty Format String Passed to Object.__format__ の原因と解決策
byte データ型など、このメソッドを持たないデータ型で format() メソッドを呼び出そうとするとします。 byte 型オブジェクトには format() メソッドがないため、インタープリターはエラーを発生させます。
次のコードでは、意図的に byte データ型で format() メソッドを呼び出しています。
コード例:
# Python 3.x
"{:10}".format(b"delftstack")
出力:
#Python 3.x
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-12-1909c614b7f5> in <module>()
----> 1 '{:10}'.format(b'delftstack')
TypeError: unsupported format string passed to bytes.__format__
このエラーの解決策は、データ型をバイトから文字列に明示的に変換することです。 変換には !s 記号を使用します。
コード例:
# Python 3.x
s = "{!s:10s}".format(b"delftstack")
print(s)
出力:
#Python 3.x
b'delftstack'
None をフォーマットしようとすると、TypeError: non-empty format string passed to object.__format__ も発生します。
コード例:
# Python 3.x
"{:.0f}".format(None)
出力:
#Python 3.x
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-4-89103a1332e2> in <module>()
----> 1 '{:.0f}'.format(None)
TypeError: unsupported format string passed to NoneType.__format__
解決策は、None の代わりに有効なデータ型を渡すことです。
コード例:
# Python 3.x
s = "{!s:10s}".format(b"delftstack")
print(s)
出力:
#Python 3.x
b'delftstack'