Python
 Computer >> コンピューター >  >> プログラミング >> Python

Python typeerror:文字列のフォーマット中にすべての引数が変換されるわけではありません

Pythonはルールの支持者です。 Python言語の主な機能の1つは、プログラムが意図したとおりに機能するように、ユーザーをチェックし続けます。文字列を操作しているときに、「文字列のフォーマット中にすべての引数が変換されない」というエラーが発生する場合があります。

このガイドでは、このエラーとそのポップアップの理由について説明します。コードでエラーを解決するために、このエラーが発生する2つの一般的なシナリオについて説明します。

面倒なことはせずに始めましょう!

問題:typeerror:文字列のフォーマット中にすべての引数が変換されない

TypeErrorは、特定のタイプの値に対して実行できないタスクを実行していることを示すタイプのエラーです。この場合、タイプエラーは文字列値に関連しています。

Pythonには、文字列をフォーマットする方法がいくつか用意されています。これにより、値を文字列に挿入したり、値を文字列の末尾に連結したりできます。

文字列をフォーマットする最も一般的な2つの方法は次のとおりです。

  • %演算子の使用(旧式)
  • .format()関数で{}演算子を使用する

これらの構文の両方を一緒に使用しようとすると、エラーが発生します。

例:文字列フォーマットルールの混合

パン屋で販売されている商品の5%の値上げを計算するプログラムを作成しましょう。

参加者の81%は、ブートキャンプに参加した後、自分たちの技術的な仕事の見通しについてより自信を持っていると述べました。今日のブートキャンプにマッチしましょう。

平均的なブートキャンプの卒業生は、ブートキャンプの開始から最初の仕事を見つけるまで、キャリアの移行に6か月も費やしませんでした。

まず、ユーザーから製品の名前と価格の2つの情報を収集します。 input()ステートメントを使用してこれを行います:

name = input("Enter the name of the product: ")
price = input("Enter the price of the product: ")

次に、「価格」の値に1.05を掛けて、製品の新しい価格を計算します。これは5%の値上げに相当します:

increase = round(float(price) * 1.05, 2)

round()ステートメントを使用して、「increase」の値を小数点以下2桁に丸めます。最後に、文字列フォーマットを使用して、製品の新しい価格をコンソールに出力します。

print("The new price of {} is ${}. " % name, str(increase))

このコードは、「name」と「increase」の値を文字列に追加します。 「increase」を文字列に変換して、文字列にマージします。値を変換する前の「increase」は浮動小数点数です。コードを実行して、何が起こるかを確認します:

Traceback (most recent call last):
  File "main.py", line 6, in <module>
	print("The new price of {} is {}" % name, str(discount))
TypeError: not all arguments converted during string formatting

コードの最後の行にエラーがあるようです。

問題は、文字列のフォーマット構文を混同していることです。 {}演算子と%演算子を使用しました。これらは、2つの異なるタイプの文字列フォーマットに使用されます。

この問題を解決するために、プログラミングの最後の行を次の2行のコードのいずれかに置き換えます。

print("The new price of {} is ${}.".format(name, str(increase)))

print("The new price of %s is $%s." % (name, str(increase)))

コードの最初の行は.format()を使用します 構文。これにより、{}の値が.format()の値に置き換えられます。 指定された順序でステートメント。

コードの2行目は、古いスタイルの%文字列フォーマット手法を使用しています。値「%s」は、%演算子の後に括弧で囲まれた値に置き換えられます。

コードをもう一度実行して、何が起こるか見てみましょう:

Enter the name of the product: Babka
Enter the price of the product: 2.50
The new price of Babka is $2.62.

コードは引数を文字列に正常に追加しました。

例:モジュロ演算子の混乱

Pythonは、パーセント記号(%)を使用して、モジュロ数と文字列の書式を計算します。モジュロ数は、除算の合計の後に残った余りです。

文字列にパーセント記号を使用する場合は、フォーマットに使用されます。数値にパーセント記号を使用する場合は、モジュロを計算するために使用されます。したがって、値がモジュロ計算を実行する文字列としてフォーマットされている場合、エラーが発生します。

数値が奇数か偶数かを計算するプログラムを見てください:

number = input("Please enter a number: ")
mod_calc = number % 2

if mod_calc == 0:
	print("This number is even.")
else:
	print("This number is odd.")
>

まず、ユーザーに番号の入力を求めます。次に、モジュロ演算子を使用して、「数値」を2で割ったときに返される余りを計算します。

モジュロ演算子による戻り値が0に等しい場合、ifの内容 ステートメント実行。それ以外の場合、elseの内容 ステートメントが実行されます。

コードを実行してみましょう:

Please enter a number: 7
Traceback (most recent call last):
  File "main.py", line 2, in <module>
	mod_calc = number % 2
TypeError: not all arguments converted during string formatting

別のTypeError。このエラーは、「数値」が文字列であるために発生します。 input() メソッドは文字列を返します。モジュロ計算を実行する場合は、「数値」を浮動小数点または整数に変換する必要があります。

float()関数を使用して、「数値」をfloatに変換できます。

mod_calc = float(number) % 2

コードをもう一度実行してみましょう:

Please enter a number: 7
This number is odd.

私たちのコードは機能します!

結論

Pythonが文字列フォーマット操作にすべての引数を追加しない場合、「文字列フォーマット中にすべての引数が変換されない」エラーが発生します。これは、文字列の書式設定構文を混同した場合、または文字列に対してモジュロ演算を実行しようとした場合に発生します。

これで、プロのソフトウェアエンジニアのように、この一般的なPythonエラーを解決する準備が整いました。


  1. 指定された文字列がキーワードであるかどうかを確認するPythonプログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −数値が与えられているので、その数値が2の累乗であるかどうかを確認する必要があります。 キーワードは、特定の用途で任意の言語によって予約されている特別な単語であり、識別子として使用することはできません。 指定された文字列がキーワードであるかどうかを確認するために、以下で説明するようにキーワードモジュールを使用しました。 例 # keyword module import keyword # Function def isKeyword(word) :    # list of all

  2. 指定された文字列のすべての順列を出力するPythonプログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −文字列の可能なすべての順列を表示するために必要な文字列が与えられます。 次に、以下の実装のソリューションを見てみましょう- 例 # conversion def toString(List):    return ''.join(List) # permutations def permute(a, l, r):    if l == r:       print (toString(a))    e