迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Python >

Python 中错误 TypeError: Must Be Real Number, Not STR

作者:迹忆客 最近更新:2023/05/16 浏览次数:

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

因此,在处理数据类型时要采取防御措施,并确保在处理日期后,将数据转换为必要的数据类型。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Pandas read_csv()函数

发布时间:2024/04/24 浏览次数:254 分类:Python

Pandas read_csv()函数将指定的逗号分隔值(csv)文件读取到 DataFrame 中。

Pandas 追加数据到 CSV 中

发布时间:2024/04/24 浏览次数:352 分类:Python

本教程演示了如何在追加模式下使用 to_csv()向现有的 CSV 文件添加数据。

Pandas 多列合并

发布时间:2024/04/24 浏览次数:628 分类:Python

本教程介绍了如何在 Pandas 中使用 DataFrame.merge()方法合并两个 DataFrames。

Pandas loc vs iloc

发布时间:2024/04/24 浏览次数:837 分类:Python

本教程介绍了如何使用 Python 中的 loc 和 iloc 从 Pandas DataFrame 中过滤数据。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便