изменение с плавающей запятой с python 3.0.1 на 3.1.2 - PullRequest
0 голосов
/ 06 апреля 2010

Я пытаюсь выучить 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 ]

5 голосов
/ 06 апреля 2010

Проблема в том, что у вас есть дополнительные символы в конце вашего числа с плавающей точкой, возможно, из-за того, что содержимое страницы изменилось с момента написания кода (число меняется каждые пятнадцать минут). Вы можете попробовать изменить следующую строку, чтобы сделать код немного более устойчивым:

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

Для еще лучшего решения вы должны использовать что-то вроде BeautifulSoup для анализа HTML.

1 голос
/ 06 апреля 2010

Вы рассчитываете end_of_price как start_of_price + 6.На самом деле ваша цена имеет длину всего 4 символа, так что вы также включаете два символа, следующих за строкой, которую хотите преобразовать в float.Затем Python жалуется, что 4.59</ не является числом.

Если вместо этого установить end_of_price на start_of_price + 4, оно должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...