[解決済み】Python TypeError: object.__format__ に渡される空でないフォーマット文字列
2022-02-16 12:32:40
質問
最近、このTypeError例外に遭遇し、デバッグが非常に困難であることがわかりました。最終的には、この小さなテストケースに落とし込みました。
>>> "{:20}".format(b"hi")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: non-empty format string passed to object.__format__
これは私にとって、とにかく非常に非自明なことです。私のコードでは、バイト列をユニコードにデコードすることで回避しています。
>>> "{:20}".format(b"hi".decode("ascii"))
'hi '
この例外はどういう意味ですか?もっと明確にする方法はないでしょうか?
解決方法は?
bytes
オブジェクトには
__format__
メソッドを使用するため、デフォルトの
object
が使用されます。
>>> bytes.__format__ is object.__format__
True
>>> '{:20}'.format(object())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: non-empty format string passed to object.__format__
ただ、これらにはストレートにアノニマス・フォーマット以外のものは使えないということです。文字列オブジェクトへの明示的な変換 (たとえば
bytes
を
str
)を取得するために
フォーマット仕様のサポート
.
を使えば、変換を明示的に行うことができます。
!s
文字列の変換を行います。
>>> '{!s:20s}'.format(b"Hi")
"b'Hi' "
>>> '{!s:20s}'.format(object())
'<object object at 0x1100b9080>'
object.__format__
は、暗黙の文字列変換を避けるため、フォーマット文字列を明示的に拒否しています。
関連
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで文字列の部分文字列を取得するにはどうすればよいですか?
-
[解決済み] Pythonで文字列を小文字にするには?
-
[解決済み] Pythonでオブジェクトが属性を持つかどうかを知る方法
-
[解決済み] どうすれば、文字列中のリテラルな中抜き文字を印刷し、また.formatを使用することができるのでしょうか?
-
[解決済み] 文字列が空かどうかを確認する方法は?
-
[解決済み] Pythonで文字列を反転させる
-
[解決済み] Pythonのクラスはなぜオブジェクトを継承するのですか?
-
[解決済み] Pythonで整数から文字列に変換する
-
[解決済み] 文字列フォーマット:% vs. .format vs. f-stringリテラル
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ピローによる動的キャプチャ認識のためのPythonサンプルコード
-
Python 可視化 big_screen ライブラリ サンプル 詳細
-
Pythonの@decoratorsについてまとめてみました。
-
[解決済み】DataFrameのコンストラクタが正しく呼び出されない!エラー
-
[解決済み】ImportError: PILという名前のモジュールがない
-
[解決済み】TypeError: 系列を <class 'float'> に変換することができません。
-
[解決済み】Python Error: "ValueError: need more than 1 value to unpack" (バリューエラー:解凍に1つ以上の値が必要です
-
[解決済み】Python: SyntaxError: キーワードは式になり得ない
-
[解決済み】ImportError: bs4という名前のモジュールがない(BeautifulSoup)
-
[解決済み】ValueError: pickleプロトコルがサポートされていません。3、python2 pickleはpython3 pickleでダンプしたファイルを読み込むことができない?