我正在尝试学习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</
>>>
有什么问题?
答案 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
,它应该有效。