TypeError: STR ではなく、実数でなければなりません
TypeError: must be real number, not str
エラーには、間違った型と非実数、この場合は str
型の使用が含まれます。
データ型の操作は難しい場合がありますが、このような TypeError
を回避するために、正しいデータ型を関数に解析していることを強制または確認することが重要です。
この記事では、そもそも TypeError: must be real number, not str
エラーが発生する仕組みと、型変換を使って解決する方法について解説します。
float()
または int()
を使用して解決する TypeError: must be real number, not str
in Python
関数、特に組み込み関数を操作する場合、多くの場合、必要な引数は特定の型です。 プリミティブ データ型、int
、float
、string
、または Boolean
のいずれかです。
したがって、処理および解析する値が正しいデータであることを確認することが重要です。
典型的な例は、組み込みの input()
関数を使用して数値を取得し、その数値を単純な数式で処理することです。
number = input("Enter a Number: ")
print(number / 34 + 45 * number)
出力:
Enter a Number: 12
Traceback (most recent call last):
File "C:\Users\akinl\Documents\Python\steps.py", line 2, in <module>
print(number/34 + 45 * number)
TypeError: unsupported operand type(s) for /: 'str' and 'int'
ここでは、数値バインディングが文字列データ 12 を保持していたため、TypeError
メッセージが表示されます。 整数または浮動小数点数の代わりに、12。
ただし、この TypeError: unsupported operand type(s) for /: 'str' and 'int'
は、この TypeError: must be real number, not str
エラーとは異なります。 違いは、起こっている操作にあります。
Python の math
ライブラリを使用して、ユーザーが入力した数値を切り捨てましょう。
import math
number = input("Enter a Number: ")
print(math.floor(number))
出力:
Enter a Number: 12.45
Traceback (most recent call last):
File "C:\Users\akinl\Documents\Python\steps.py", line 3, in <module>
print(math.floor(number))
TypeError: must be real number, not str
ここで、floor()
メソッドへの文字列を含む number
バインディングを解析しているため、TypeError
は異なります。このメソッドには数値、float
または integer
が必要です。
したがって、この問題を解決するには、必要に応じて、ユーザーが渡す値のデータ型を number
バインディングに float
または integer
に変換する必要があります。
組み込みの float()
関数は、浮動小数点数を扱う場合に最も適しています。 切り上げるには 10 進数が必要なので、float()
関数が必要です。
import math
number = float(input("Enter a Number: "))
print(math.floor(number))
出力:
Enter a Number: 123.45
123
int()
関数は、必要な数が整数である場合に役立ちます。 sin()
メソッドに対して整数のみを解析する必要がある場合は、int()
メソッドを使用できます。
import math
number = int(input("Enter a Number: "))
print(math.sin(number))
出力:
Enter a Number: 12
-0.5365729180004349
単純なケースの場合は簡単に解決できますが、複雑なシナリオや難しいシナリオの場合は扱いが難しくなります。 たとえば、ランダム化された三角関数の計算を行っている場合、変換する必要がある場所を確認するのが難しい場合があります。
特に操作式の前に、すぐに変換することをお勧めします。 この場合は、数学演算です。
import random
import math
def create():
global sideA
sideA = format(random.uniform(1, 100), ".0f")
global sideB
sideB = format(random.uniform(1, 100), ".0f")
global angleA
angleA = format(random.uniform(1, 180), ",.3f")
global angleB
angleB = ANGLE_B()
return angleB
def ANGLE_B():
angle = format(math.asin(sideB * (math.sin(angleA) / sideA)), ".3f")
return angle
print(create())
出力:
Traceback (most recent call last):
File "c:\Users\akinl\Documents\Python\float.py", line 18, in <module>
print(create())
File "c:\Users\akinl\Documents\Python\float.py", line 11, in create
angle_b = ANGLE_B()
File "c:\Users\akinl\Documents\Python\float.py", line 15, in ANGLE_B
ang = format(math.asin(side_b*(math.sin(angle_a)/side_a)), '.3f')
TypeError: must be real number, not str
エラーをトレースすると、print(create())
から始まることがわかります。これは ANGLE_B()
関数を呼び出し、バインディング sideA
、sideB
、および angleA
を使用します。
これらのバインディングは、float
および int
データ値を必要とする math
メソッドに解析されます。 ただし、バインディングのデータ型は strings
であり、float
または int
に変換する必要があります。
この場合、コードの問題を解決するためのより責任ある方法は、値を再度変更する必要がないため、数式で使用する前にデータ型を変換することです。
import random
import math
def create():
global sideA
sideA = float(format(random.uniform(1, 100), ".0f"))
global sideB
sideB = float(format(random.uniform(1, 100), ".0f"))
global angleA
angleA = float(format(random.uniform(1, 180), ",.3f"))
global angleB
angleB = ANGLE_B()
return angleB
def ANGLE_B():
angle = math.asin(sideB * (math.sin(angleA) / sideA))
return angle
print(create())
出力:
0.7293575839721542
したがって、データ型を扱うときは慎重になり、日付を処理した後、データを必要なデータ型に変換するようにしてください。
Olorunfemi is a lover of technology and computers. In addition, I write technology and coding content for developers and hobbyists. When not working, I learn to design, among other things.
LinkedIn関連記事 - Python TypeError
- Python TypeError: List Indices Must Be Integers, Not List を修正する
- Python TypeError: Unhashable タイプ: リスト
- Python TypeError: 必要な位置引数が 1つありません
- TypeError を解決する: Python での文字列の書式設定中にすべての引数が変換されるわけではありません
- TypeError を解決する: Python では整数が必要です
関連記事 - Python Error
- AttributeError の解決: 'list' オブジェクト属性 'append' は読み取り専用です
- AttributeError の解決: Python で 'Nonetype' オブジェクトに属性 'Group' がありません
- AttributeError: 'generator' オブジェクトに Python の 'next' 属性がありません
- AttributeError: 'numpy.ndarray' オブジェクトに Python の 'Append' 属性がありません
- AttributeError: Int オブジェクトに属性がありません
- AttributeError: Python で 'Dict' オブジェクトに属性 'Append' がありません