Python 中错误 TypeError: Must Be Real Number, Not STR
TypeError: must be real number, not str 错误涉及使用错误的类型和非实数,在本例中为 str 类型。
使用数据类型可能很棘手,但重要的是强制执行或确保您将正确的数据类型解析为函数以避免此类 TypeError。
本文将解释 TypeError: must be real number, not str 错误是如何首先出现的,以及如何使用类型转换来解决它。
使用 float() 或 int() 解决Python 中 TypeError: must be real number, not str
在使用函数时,尤其是内置函数,所需的参数通常是特定类型的。 它可以是任何原始数据类型,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'
在这里,我们有一个 TypeError 消息,因为数字绑定持有一个字符串数据 12; 而不是整数或浮点数,12。
但是,此 TypeError: unsupported operand type(s) for /: 'str' and 'int' 与此 TypeError: must be real number, not str 错误不同。 区别在于正在发生的操作。
让我们使用 Python 中的数学库来向下舍入用户输入的数字
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
现在,TypeError 不同了,因为我们正在解析数字绑定,它包含一个字符串到 floor()
方法,而该方法需要一个数字、浮点数或整数。
因此,要解决这个问题,我们需要将用户传递给数字绑定的值的数据类型转换为浮点数或整数,这取决于我们的需要。
内置的 float()
函数最适合处理浮点数。 鉴于我们需要对十进制数进行四舍五入,我们需要 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, 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
如果跟踪错误,您可以看到它从调用 ANGLE_B()
函数的 print(create())
开始,使用绑定的 sideA、sideB 和 angleA。
这些绑定被解析为需要 float 和 int 数据值的数学方法。 但是,绑定的数据类型是字符串,需要转换为 float 或 int。
在这种情况下,解决代码问题的更负责任的方法是在数学表达式中使用之前转换数据类型,因为我们不需要再次更改值。
import random, 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
因此,在处理数据类型时要采取防御措施,并确保在处理日期后,将数据转换为必要的数据类型。
相关文章
Pandas DataFrame DataFrame.shift() 函数
发布时间:2024/04/24 浏览次数:133 分类:Python
-
DataFrame.shift() 函数是将 DataFrame 的索引按指定的周期数进行移位。
Python pandas.pivot_table() 函数
发布时间:2024/04/24 浏览次数:82 分类:Python
-
Python Pandas pivot_table()函数通过对数据进行汇总,避免了数据的重复。
Pandas read_csv()函数
发布时间:2024/04/24 浏览次数:254 分类:Python
-
Pandas read_csv()函数将指定的逗号分隔值(csv)文件读取到 DataFrame 中。
Pandas 多列合并
发布时间:2024/04/24 浏览次数:628 分类:Python
-
本教程介绍了如何在 Pandas 中使用 DataFrame.merge()方法合并两个 DataFrames。
Pandas loc vs iloc
发布时间:2024/04/24 浏览次数:837 分类:Python
-
本教程介绍了如何使用 Python 中的 loc 和 iloc 从 Pandas DataFrame 中过滤数据。
在 Python 中将 Pandas 系列的日期时间转换为字符串
发布时间:2024/04/24 浏览次数:894 分类:Python
-
了解如何在 Python 中将 Pandas 系列日期时间转换为字符串