float从python 3.0.1更改为3.1.2

时间:2010-04-06 17:42:18

标签: python

我正在尝试学习python。我使用的是3.1.2,而o'reilly的书使用的是3.0.1 这是我的代码:

import urllib.request

price = (99.99)

while price > 4.74:
    page = urllib.request.urlopen ("http://www.beans-r-us.biz/prices-loyalty.html")
    text = page.read().decode("utf8")

    where = text.find('>$')

    start_of_price = where + 2
    end_of_price = start_of_price + 6

    price = float(text[start_of_price:end_of_price])

print ("Buy!")

这是我的错误:

Traceback (most recent call last):
  File "/Users/odin/Desktop/Coffe.py", line 14, in <module>
    price = float(text[start_of_price:end_of_price])
ValueError: invalid literal for float(): 4.59</
>>> 

有什么问题?

2 个答案:

答案 0 :(得分:5)

问题是你的浮动结尾有多余的字符,可能是因为自编写代码以来页面内容发生了变化(数字似乎每十五分钟就会改变一次)。您可以尝试更改以下行以使代码更加健壮:

end_of_price = text.find('<', start_of_price)

要获得更好的解决方案,您应该使用类似BeautifulSoup的内容来解析HTML。

答案 1 :(得分:1)

您正在将end_of_price计算为start_of_price + 6。实际上,您的价格值似乎只有4个字符长,因此您还要在要转换为float的字符串中包含以下两个字符。然后Python抱怨4.59</不是数字。

如果您将end_of_price设置为start_of_price + 4,它应该有效。