AttributeError:'HTTPResponse'对象没有属性'type'

时间:2013-08-06 01:53:37

标签: python python-3.x

所以,我正在尝试建立一个程序,通过使用雅虎的RSS源来检索NHL赛季的分数。

我不是一个经验丰富的程序员,所以有些事情还没有完全进入我的脑海。但是,到目前为止,这是我的代码:


from urllib.request import urlopen
import xml.etree.cElementTree as ET

YAHOO_NHL_URL = 'http://sports.yahoo.com/nhl/rss'

def retrievalyahoo():
    nhl_site = urlopen('http://sports.yahoo.com/nhl/rss')
    tree = ET.parse(urlopen(nhl_site))

retrievalyahoo()

上面的标题说明了我在测试上述代码后得到的错误。

编辑:好的,在修复之后,回溯错误就像这一样,我感到困惑:

Traceback (most recent call last):
  File "C:/Nathaniel's Folder/Website Scores.py", line 12, in <module>
    retrievalyahoo()
  File "C:/Nathaniel's Folder/Website Scores.py", line 10, in retrievalyahoo
    tree = ET.parse(nhl_site)
  File "C:\Python33\lib\xml\etree\ElementTree.py", line 1242, in parse
    tree.parse(source, parser)
  File "C:\Python33\lib\xml\etree\ElementTree.py", line 1730, in parse
    self._root = parser._parse(source)
  File "<string>", line None
xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 17, column 291

1 个答案:

答案 0 :(得分:4)

问题是您尝试在urlopen的结果上致电urlopen

只需拨打一次,就像这样:

nhl_site = urlopen('http://sports.yahoo.com/nhl/rss')
tree = ET.parse(nhl_site)

错误消息可能更好。如果您查看urlopen的文档:

  

打开网址网址,可以是字符串或Request对象。

显然,它返回的http.client.HTTPResponse对象既不是字符串也不是Request对象。这里发生的是urlopen看到它不是一个字符串,因此假设它是Request,并开始尝试访问Request个对象所具有的方法和属性。这种设计通常是一件好事,因为它可以让你传递像Request一样的东西而且它们只会起作用......但它确实意味着如果你传递的东西不能< / em>表现得像Request,错误信息可能很神秘。