ValueError:无法将字符串转换为浮点数:'31,950'

Posted

技术标签:

【中文标题】ValueError:无法将字符串转换为浮点数:\'31,950\'【英文标题】:ValueError: could not convert string to float: '31,950'ValueError:无法将字符串转换为浮点数:'31,950' 【发布时间】:2020-05-26 19:29:31 【问题描述】:

这是我的代码:

def check_price():
    page = requests.get(URL, headers=headers)

    soup = BeautifulSoup(page.content, 'html.parser')


    title = soup.find(id="itemTitle").get_text()
    price = soup.find(id="prcIsum").get_text()
    converted_price = float(price[4:10])
    converted_title = title[16:61]

    if(converted_price < 31.950):
        send_mail()

    print(converted_title)
    print(converted_price)

    if(converted_price > 31.000):
        send_mail()

这是我得到的错误

  File "C:/Users/Mario/PycharmProjects/Bitanga/AI.py", line 55, in <module>
    check_price()
  File "C:/Users/Mario/PycharmProjects/Bitanga/AI.py", line 20, in check_price
    converted_price = float(price[4:10])
  ValueError: could not convert string to float: '31,950'

【问题讨论】:

Python 只识别以. 作为小数点分隔符的浮点数,每个docs.python.org/3/reference/…。如果要将字符串'31,950' 解析为浮点数31.95,则需要替换 逗号。如果应该是31950.0,则需要删除逗号。 '31,950' 不是有效的浮点数据。 , 替换为. 以将字符串转换为浮点数。 您从该错误消息中了解/不了解什么? 【参考方案1】:

您必须将字符串31,950 中的, 替换为.,以便python 可以将其识别为小数分隔符。使用:

soup = BeautifulSoup(page.content, 'html.parser')


title = soup.find(id="itemTitle").get_text()
price = soup.find(id="prcIsum").get_text()
converted_price = float(price[4:10].replace(',', '.'))
converted_title = title[16:61]

if(converted_price < 31.950):
    send_mail()

print(converted_title)
print(converted_price)

if(converted_price > 31.000):
    send_mail()

【讨论】:

谢谢!我的声誉很低,所以我不能给你一个upvote..但是非常感谢!它有帮助 如果答案解决了您的问题,请accept它。【参考方案2】:

这是因为你的字符串中包含一个不能转换成','的字符。 对于从字符串到 int、float、double、long 的转换,您的字符串不应包含任何看起来不像数字的字符。 或者您可以使用正则表达式删除所有此类字符,以便您的字符串中只有纯数字。 例如。

number = str[ /\d+(?:.\d+)?/ ]

【讨论】:

以上是关于ValueError:无法将字符串转换为浮点数:'31,950'的主要内容,如果未能解决你的问题,请参考以下文章

ValueError:无法将字符串转换为浮点数:'2100 - 2850'

ValueError:无法将字符串转换为浮点数:'Mme'

ValueError:无法将字符串转换为浮点数:'62,6'

ValueError:无法将字符串转换为浮点数:''20,99''

我收到 ValueError:无法将字符串转换为浮点数:'8,900' [重复]

ValueError:无法将字符串转换为浮点数:'31,950'