TypeError: Muss eine reelle Zahl sein, nicht STR

Olorunfemi Akinlua 21 Juni 2023
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 Akinlua avatar Olorunfemi Akinlua avatar

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

Verwandter Artikel - Python TypeError

Verwandter Artikel - Python Error