{0} のようなプレースホルダーを % を使用して置き換えようとすると、「TypeError: 文字列のフォーマット中にすべての引数が変換されませんでした」というエラーが表示されるのはなぜですか? 質問する

{0} のようなプレースホルダーを % を使用して置き換えようとすると、「TypeError: 文字列のフォーマット中にすべての引数が変換されませんでした」というエラーが表示されるのはなぜですか? 質問する

ユーザーから 2 つの文字列を読み取るコードがあります。

name1 = input("Enter name 1: ")
name2 = input("Enter name 2: ")

後で、これらの文字列を印刷用に長い文字列にフォーマットします。

if len(name1) > len(name2):
    print ("'{0}' is longer than '{1}'"% name1, name2)

しかし、次のようなエラー メッセージが表示されます。

Traceback (most recent call last):
  File "program.py", line 13, in <module>
    print ("'{0}' is longer than '{1}'"% name1, name2)
TypeError: not all arguments converted during string formatting

コードの何が問題なのでしょうか? 文字列を適切にフォーマットするには、この行をどのように記述すればよいでしょうか?


参照文字列の書式設定: % と .format と f 文字列リテラルこの種の文字列フォーマットを行う最も一般的な方法の詳細な比較については、変数の値を文字列内に入れる(文字列内に挿入する)にはどうすればよいでしょうか?この種の文字列構築の一般的なガイドについては、Python で文字列フォーマットを使用してタプルを印刷するエラーの別の一般的な原因。

ベストアンサー1

古いスタイルの%書式設定では、%書式設定にコードが使用されます。

# A single value can be written as is:
'It will cost $%d dollars.' % 95

# Multiple values must be provided as a tuple:
"'%s' is longer than '%s'" % (name1, name2)

新しいスタイルの{}書式設定では、{}コードと メソッドを使用します.format。 混在させないようにしてください。「テンプレート」文字列にプレース{}ホルダーが含まれている場合は、 を呼び出し.format、 を使用しないでください%

# The values to format are now arguments for a method call,
# so the syntax is the same either way:
'It will cost ${0} dollars.'.format(95)

"'{0}' is longer than '{1}'".format(name1, name2)

おすすめ記事