TypeError: debe ser un número real, no STR
El error TypeError: must be real number, not str
implica utilizar un tipo incorrecto y un número no real, y en este caso, un tipo str
.
Trabajar con tipos de datos puede ser complicado, pero es importante hacer cumplir o asegurarse de que está analizando el tipo de datos correcto en una función para evitar ese Error de tipo
.
Este artículo explicará cómo ocurre en primer lugar el error TypeError: must be real number, not str
y cómo resolverlo usando la conversión de tipo.
Use float()
o int()
para resolver TypeError: debe ser un número real, no str
en Python
Cuando se trabaja con funciones, especialmente funciones integradas, los argumentos requeridos suelen ser de un tipo particular. Podría ser cualquiera de los tipos de datos primitivos, int
, float
, string
o Boolean
.
Por lo tanto, es importante asegurarse de que los valores con los que estamos trabajando y analizando sean los datos correctos.
Un ejemplo típico es trabajar con la función incorporada input()
para tomar un número y trabajar con el número en una expresión matemática simple.
number = input("Enter a Number: ")
print(number / 34 + 45 * number)
Producción :
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'
Aquí, tenemos un mensaje de TypeError
porque el enlace numérico contenía una cadena de datos 12; en lugar de un número entero o flotante, 12.
Sin embargo, este TypeError: tipo(s) de operando no soportado(s) para /: 'str' and 'int'
es diferente de este error TypeError: must be real number, not str
. La distinción está en la operación que está ocurriendo.
Usemos la biblioteca matemática
en Python para redondear hacia abajo el número que ingresa el usuario.
import math
number = input("Enter a Number: ")
print(math.floor(number))
Producción :
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
Ahora, el TypeError
es diferente porque estamos analizando el enlace number
, que contiene una cadena para el método floor()
, y el método requiere un número, float
o integer
.
Por lo tanto, para resolver el problema, necesitamos convertir el tipo de datos del valor que el usuario pasa al enlace number
a float
o integer
, según lo que necesitemos.
La función integrada float()
es más apropiada cuando se trata de números de punto flotante. Dado que necesitamos números decimales para redondear, necesitamos la función float()
.
import math
number = float(input("Enter a Number: "))
print(math.floor(number))
Producción :
Enter a Number: 123.45
123
La función int()
puede ser útil para casos en los que el número necesario es un número entero. Si solo necesitamos analizar números enteros con el método sin()
, podemos usar el método int()
.
import math
number = int(input("Enter a Number: "))
print(math.sin(number))
Producción :
Enter a Number: 12
-0.5365729180004349
Puede ser más fácil de resolver para casos más simples pero más complicado para algunos escenarios complejos o más difíciles. Por ejemplo, puede ser difícil ver dónde necesita convertir si está trabajando en una calculadora trigonométrica aleatoria.
Siempre es mejor convertir inmediatamente, especialmente antes de la expresión de la operación. En este caso, la operación matemática.
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())
Producción :
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
Si rastrea el error, puede ver que comienza desde print(crear ())
que llama a la función ANGLE_B()
que usa el enlace sideA
, sideB
y angleA
.
Estos enlaces se analizan en los métodos “matemáticos”, que requieren valores de datos “flotantes” e int
. Sin embargo, el tipo de datos del enlace es strings
y debe convertirse a float
o int
.
En este caso, la forma más responsable de resolver el problema del código es convertir el tipo de datos antes de usarlo en una expresión matemática, ya que no necesitamos cambiar el valor nuevamente.
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())
Producción :
0.7293575839721542
Por lo tanto, esté a la defensiva cuando trate con tipos de datos y asegúrese de que, después de trabajar con la fecha, convierta los datos al tipo de datos necesario.
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.
LinkedInArtículo relacionado - Python TypeError
- Python TypeError: falta 1 argumento posicional requerido
- Python TypeError: Unhashable Tipo: Lista
- Resuelva el TypeError: no todos los argumentos se convirtieron durante el formato de cadena en Python
- Resuelva el TypeError: se requiere un número entero en Python
- Solucione el error de tipo de Python: los índices de lista deben ser números enteros, no una lista
Artículo relacionado - Python Error
- Administrar fallas de segmentación en Python
- Archivo <Stdin>, Línea 1, en <Módulo> Error en Python
- Arreglar AttributeError: el objeto 'generador' no tiene atributo 'siguiente' en Python
- Arreglar el comando cl.exe falló: no existe tal archivo o directorio en Windows
- Arreglar NameError: la variable no está definida en Python
- Arreglar Socket.Gaierror: [Errno 8] Nodename ni Servname proporcionado, o desconocido en Python