ValueError: int() 以 10 为底的无效文字:'196.41'

Posted

技术标签:

【中文标题】ValueError: int() 以 10 为底的无效文字:\'196.41\'【英文标题】:ValueError: invalid literal for int() with base 10: '196.41'ValueError: int() 以 10 为底的无效文字:'196.41' 【发布时间】:2018-05-25 12:21:54 【问题描述】:

我不明白为什么它适用于不同的场景,但不适用于这个场景。 基本上,一些绅士帮助我 HERE 改进了我的代码以获取天气,这非常有效。然后我尝试做同样的事情来抓取一个跨度标签<span class="text-large2" data-currency-value="">$196.01</span>中的ETH值。因此,我在代码中采用了相同的技术,替换了字段,并希望它能够正常工作。

代码在这里:

import requests
from BeautifulSoup import BeautifulSoup
import time

url = 'https://coinmarketcap.com/currencies/litecoin/'

def ltc():
    while (True):
        response = requests.get(url)
        soup = BeautifulSoup(response.content)
        price_now = int(soup.find("div", "class": "col-xs-6 col-sm-8 col-md-4 text-left").find(
        "span", "class": "text-large2").getText())
        print(u"LTC price is: ".format(price_now))
        # if less than 150
        if 150 > price_now:
            print('Price is Low')
        # if more than 200
        elif 200 < price_now:
            print('Price is high')

if __name__ == "__main__":
    ltc()

输出如下所示:

Traceback (most recent call last):
  File "test2.py", line 24, in <module>
    ltc()
  File "test2.py", line 13, in ltc
    "span", "class": "text-large2").getText())
ValueError: invalid literal for int() with base 10: '196.01'

然后,我终于这样尝试了;但从这里我得到误报,但没有错误。它打印任何它想要的东西

import requests
from bs4 import BeautifulSoup
import time

url = 'https://coinmarketcap.com/currencies/litecoin/'

def liteCoin():
    while (True):
        response = requests.get(url)
        html = response.text
        soup = BeautifulSoup(html, 'html.parser')
        value = soup.find('span', 'class': 'text-large2')
        print(''.join(value.stripped_strings))
        if 150 > value:         # if less than 150
            print('Price is Low!')
        elif 200 < value:       # if more than 200
            print('Price is High')
        else:
            print('N/A')
        time.sleep(5)

if __name__ == "__main__":
    liteCoin()

问题是 ETH 的值在span tag 内有一个$ 符号吗?而且,那样程序不知道如何处理字符串?

【问题讨论】:

你应该看看 python 的基础知识,例如here。 你的问题的标题基本上告诉你问题是什么。相信我,花一些时间阅读基础知识是有回报的。 【参考方案1】:

你需要了解 Python 中的类型,你得到的是一个浮点数而不是一个整数,你需要将浮点数转换为一个字符串来打印它。因此,需要进行两项更改。

    price_now = float(soup.find("div", "class": "col-xs-6 col-sm-8 col-md-4 text-left").find("span", "class": "text-large2").getText())
    print(u"LTC price is: ".format(str(price_now)))

输出:

LTC price is: 195.44
LTC price is: 195.44

【讨论】:

天哪,现在它实际上打印了它需要的东西。谢谢【参考方案2】:

首先,让我们简化您的示例程序:

>>> int('196.01')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '196.01'

无法将字符串'196.01' 转换为整数。

试试这个:

>>> int(float('196.01'))
196

从简单回到复杂,我们可以这样做:

#UNTESTED
price_now = int(float(soup.find("div", "class": "col-xs-6 col-sm-8 col-md-4 text-left").find(
    "span", "class": "text-large2").getText()))

【讨论】:

可能也需要去掉货币符号。 我想过,但是 OP 剪切和粘贴的错误另有说明:ValueError: invalid literal for int() with base 10: '196.01'

以上是关于ValueError: int() 以 10 为底的无效文字:'196.41'的主要内容,如果未能解决你的问题,请参考以下文章

ValueError: int() 以 10 为底的无效文字:'10025.0'

ValueError:int() 的无效文字,以 10 为底错误

ValueError: int() 以 10 为底的无效文字:'196.41'

用户输入给出“ValueError:int() 以 10 为底的无效文字:”

如何修复:ValueError:long() 以 10 为底的无效文字

Django 管理员,自定义视图错误:int() 以 10 为底的无效文字