Python 3.1 код и ошибка - PullRequest
       10

Python 3.1 код и ошибка

2 голосов
/ 26 октября 2010

64-битная VISTA
Python 3.1

from urllib import request
a = request.urlopen('http://www.marketwatch.com/investing/currency/CUR_USDYEN').read(20500)
b = a[19000:20500]
idx_pricewrap = b.find('pricewrap')
context = b[idx_pricewrap:idx_pricewrap+80]
idx_bgLast = context.find('bgLast')
rate = context[idx_bgLast+8:idx_bgLast+15]
print(rate)
Traceback (most recent call last):
 File "c:\P31Working\test_urllib.py", line 4, in 
   idx_pricewrap = b.find('pricewrap')
TypeError: expected an object with the buffer interface
Process terminated with an exit code of 1

Я понятия не имею, что означает эта ошибка.

Пожалуйста, помогите.

Ответы [ 2 ]

1 голос
/ 26 октября 2010

Python 3 намного строже, когда речь идет о разнице между байтами и строками (Unicode). Результат urlopen(...).read(...), конечно, является объектом типа bytes, а реализация bytes.find не позволяет вам искать строки Unicode. В вашем случае вы можете просто заменить «ценовую упаковку» на двоичную строку:

idx_pricewrap = b.find(b'pricewrap')

То же самое относится и к другим .find звонкам. Python 2 кодировал строки Unicode автоматически, где это имело (меньше или больше) смысл, но Python 3 ввел больше ограничений, о которых вам нужно знать.

0 голосов
/ 26 октября 2010

Я наконец нашел соответствующий пример в документах:

http://docs.python.org/py3k/library/urllib.request.html?highlight=urllib#examples

Первый пример дал мне некоторое понимание и привел меня к пересмотру моего кода до

http://tutoree7.pastebin.com/sUq8s4wh

, который работает как шарм.

...