Python中三种方法避免字符串转浮点时出现ValueError

在 Python 中,ValueError是一种异常类型,通常表示函数收到了类型正确但值不合适的参数。

例如,如果我们尝试将字符串转换为浮点数,并且该字符串不是浮点数的有效表示形式,则我们可能会遇到 ValueError: Could not Convert to string to float in Python ,如下所示:

temperature = "96.5 C"

print(float(temperature))

输出:
Traceback (most recent call last):
  File "C:\Users\USER\PycharmProjects\pythonProject\TS\main.py", line 3, in <module>
    print(float(temperature))
          ^^^^^^^^^^^^^^^^^^
ValueError: could not convert string to float: '96.5 C'

由于字符串(温度)中包含非数字数据类型。Python 中的float ()无法转换它,并且会导致错误。

Python 中有很多不同的方法来处理这个“无法将字符串转换为浮点数: ”问题:

  • 数据清洗或预处理
  • 使用 try/ except 块
  • 使用条件检查

1、数据清洗或预处理避免ValueError 始终确保我们尝试转换为 Python 浮点数的数据代表数值。我们可能需要预处理数据以清理数据并确保其格式正确。

例如,考虑一个美国杂货店各种商品价格的 Python 数据集。价格值可以存储为带有美元符号的字符串,例如“$5.00”。如果我们尝试将其直接转换为 Python 浮点数,我们将因美元符号而得到ValueError 。为了解决这个问题,我们可以在转换之前删除美元符号:

price_string = "$5.0"
price_string = price_string.replace("$", "")
price_float = float(price_string)
print(price_float)

replace() 方法将用空参数(如提供的)替换字符串中的美元“$”符号,我们可以轻松地将 Python 字符串值转换为 Python 浮点值。

我们可以使用Python 中字符串方法中的strip()和lstrip()来删除字符串中的“$”美元符号。因为它们还可以从字符串中删除字符。

2、使用 try/ except 块 在Python中,try块包含可能导致错误的代码块,如果发生任何错误,则 except 块将处理错误并根据提供的指令执行此操作。

例如,让我们考虑一个简单的示例,其中我们有一个 Python 字符串列表,每个字符串代表美国不同地标的海拔高度(以英尺为单位)。其中一些是数字的,而另一些则由于数据错误或未知值而成为非数字的。

elevations = ["14000", "Unknown", "12000", "Not Available", "10000", "16000"]

for i in range(len(elevations)):
    try:
        Try to convert the string to a float
        elevations[i] = float(elevations[i])
    except ValueError:
        如果出现 ValueError,则打印错误信息并保留原始字符串
        print(f"Cannot convert {elevations[i]} to a float. Keeping the original string.")
        continue

print(elevations)

循环遍历 Python 列表中的所有项目后,我们打印该列表。现在,它包含所有有效海拔的浮点数以及无法转换为 Python 浮点数的所有条目的原始字符串。

输出:

Cannot convert Unknown to a float. Keeping the original string.
Cannot convert Not Available to a float. Keeping the original string.
[14000.0, 'Unknown', 12000.0, 'Not Available', 10000.0, 16000.0]

3、使用条件检查 另一种选择是仅在 Python 中尝试将字符串转换为浮点数(如果它实际上是数值)。我们可以编写一个函数,在尝试转换之前检查字符串是否为数字:

例如,我们要记下电子商务网站上可用产品的价格,但有些产品价格没有可用,我们想用可用的价格进行一些数学计算:

def is_number(s):
    try:
        float(s)
        return True
    except ValueError:
        return False

prices = ["$5.0", "$10.0", "Not available"]

for price in prices:
    price = price.replace("$", "")
    if is_number(price):
        price = float(price)
        print(price)
    else:
        continue

输出:

5.0
10.0