TypeError: Muss eine reelle Zahl sein, nicht STR
Der Fehler TypeError: must be real number, not str
beinhaltet die Verwendung eines falschen Typs und einer nicht reellen Zahl, und in diesem Fall eines str
-Typs.
Das Arbeiten mit Datentypen kann schwierig sein, aber es ist wichtig, dass Sie den richtigen Datentyp für eine Funktion durchsetzen oder sicherstellen, dass Sie einen solchen TypeError
vermeiden.
Dieser Artikel erklärt, wie der Fehler TypeError: must be real number, not str
überhaupt auftritt und wie man ihn durch Typkonvertierung löst.
Verwenden Sie float()
oder int()
, um TypeError: must be real number, not str
in Python zu lösen
Bei der Arbeit mit Funktionen, insbesondere integrierten Funktionen, sind die erforderlichen Argumente oft von einem bestimmten Typ. Es könnte einer der primitiven Datentypen, int
, float
, string
oder Boolean
sein.
Daher ist es wichtig sicherzustellen, dass die Werte, mit denen wir arbeiten und die analysiert werden, die richtigen Daten sind.
Ein typisches Beispiel ist die Arbeit mit der eingebauten input()
-Funktion, um eine Zahl zu nehmen und mit der Zahl in einem einfachen mathematischen Ausdruck zu arbeiten.
number = input("Enter a Number: ")
print(number / 34 + 45 * number)
Ausgang:
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'
Hier haben wir eine TypeError
-Meldung, weil die Nummernbindung eine Zeichenfolge data 12 enthielt; anstelle einer Ganzzahl oder Gleitkommazahl 12.
Dieser Fehler TypeError: unsupported operand type(s) for /: 'str' and 'int'
unterscheidet sich jedoch von diesem Fehler TypeError: must be real number, not str
. Der Unterschied liegt in der Operation, die passiert.
Lassen Sie uns die Bibliothek math
in Python verwenden, um die Zahl abzurunden, die der Benutzer eingibt.
import math
number = input("Enter a Number: ")
print(math.floor(number))
Ausgang:
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
Jetzt ist der TypeError
anders, weil wir die number
-Bindung parsen, die eine Zeichenfolge für die floor()
-Methode enthält, und die Methode eine Zahl, float
oder integer
erfordert.
Um das Problem zu lösen, müssen wir daher den Datentyp des Werts, den der Benutzer an die Bindung number
übergibt, in float
oder integer
konvertieren, je nachdem, was wir brauchen.
Die eingebaute Funktion float()
ist am besten geeignet, wenn es um Gleitkommazahlen geht. Da wir zum Aufrunden Dezimalzahlen benötigen, benötigen wir die Funktion float()
.
import math
number = float(input("Enter a Number: "))
print(math.floor(number))
Ausgang:
Enter a Number: 123.45
123
Die Funktion int()
kann nützlich sein, wenn die benötigte Zahl eine ganze Zahl ist. Wenn wir nur ganze Zahlen brauchen, die in die sin()
-Methode geparst werden sollen, können wir die int()
-Methode verwenden.
import math
number = int(input("Enter a Number: "))
print(math.sin(number))
Ausgang:
Enter a Number: 12
-0.5365729180004349
Es kann für einfachere Fälle einfacher zu lösen sein, aber für einige komplexe oder schwierigere Szenarien schwieriger. Beispielsweise kann es schwierig sein, zu erkennen, wo Sie konvertieren müssen, wenn Sie an einem randomisierten trigonometrischen Rechner arbeiten.
Es ist immer besser, sofort zu konvertieren, insbesondere vor dem Operationsausdruck. In diesem Fall die mathematische Operation.
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())
Ausgang:
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
Wenn Sie den Fehler verfolgen, können Sie sehen, dass er bei print(create())
beginnt, das die Funktion ANGLE_B()
aufruft und die Bindung sideA
, sideB
und angleA
verwendet.
Diese Bindungen werden in die math
-Methoden geparst, die float
- und int
-Datenwerte erfordern. Der Datentyp der Bindung ist jedoch strings
und muss entweder in float
oder int
konvertiert werden.
In diesem Fall besteht der verantwortungsbewusstere Weg zur Lösung des Codeproblems darin, den Datentyp vor der Verwendung in einem mathematischen Ausdruck zu konvertieren, da wir den Wert nicht erneut ändern müssen.
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())
Ausgang:
0.7293575839721542
Seien Sie daher beim Umgang mit Datentypen defensiv und stellen Sie sicher, dass Sie nach der Arbeit mit dem Datum die Daten in den erforderlichen Datentyp konvertieren.
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.
LinkedInVerwandter Artikel - Python TypeError
- Beheben Sie den Python TypeError: List Indices Must Be Integers, Not List
- Beheben Sie den TypeError: Not All Arguments Converted While String Formatting in Python
- Lösen Sie den TypeError: In Python ist eine ganze Zahl erforderlich
- Python TypeError: 1 erforderliches Positionsargument fehlt
- Python TypeError: Nicht hashbarer Typ: Liste
- TypeError: Iteration über Non-Sequence
Verwandter Artikel - Python Error
- Adresse wird bereits verwendet Fehler in Python
- AttributeError: __Exit__ in Python
- AttributeError: 'Dict'-Objekt hat kein Attribut 'Append' in Python
- AttributeError: 'NoneType'-Objekt hat kein Attribut 'Text' in Python
- AttributeError: Int-Objekt hat kein Attribut
- AttributeError: Modul Urllib hat keine Attributanforderung