TypeError を修正: Python で Object.__format__ に渡される空でないフォーマット文字列

Fariba Laiq 2023年6月21日
TypeError を修正: Python で Object.__format__ に渡される空でないフォーマット文字列

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'
著者: Fariba Laiq
Fariba Laiq avatar Fariba Laiq avatar

I am Fariba Laiq from Pakistan. An android app developer, technical content writer, and coding instructor. Writing has always been one of my passions. I love to learn, implement and convey my knowledge to others.

LinkedIn

関連記事 - Python Error