令人费解的Python I / O错误:[Errno 2]没有这样的文件或目录

时间:2013-04-15 17:44:26

标签: file-io python-3.x

我正在尝试从服务器(使用Python 3.2.3 )获取XML文件,但我一直收到这样的错误,即“没有这样的文件或目录”。我确定URL是正确的,因为它在错误消息中输出URL,我可以复制粘贴它并在浏览器中加载它。所以我很困惑这是怎么回事。这是我的代码:

import xml.etree.ElementTree as etree

class Blah(object):

    def getXML(self,xmlurl):
        tree = etree.parse(xmlurl)
        return tree.getroot()

    def pregameData(self,url):
        try:
            x = self.getXML('{0}linescore.xml'.format(url))
        except IOError as err:
            x = "I/O error: {0}".format(err)
        return x


if __name__ == '__main__':

    x = Blah()
    l = ['http://gd2.mlb.com/components/game/mlb/year_2013/month_04/day_15/gid_2013_04_15_anamlb_minmlb_1/',
         'http://gd2.mlb.com/components/game/mlb/year_2013/month_04/day_15/gid_2013_04_15_phimlb_cinmlb_1/',
         'http://gd2.mlb.com/components/game/mlb/year_2013/month_04/day_15/gid_2013_04_15_slnmlb_pitmlb_1/'
        ]
    for url in l:
        pre = x.pregameData(url)
        print(pre)

它总是会返回此错误:

I/O error: [Errno 2] No such file or directory: 'http://gd2.mlb.com/components/game/mlb/year_2013/month_04/day_15/gid_2013_04_15_anamlb_minmlb_1/linescore.xml'
I/O error: [Errno 2] No such file or directory: 'http://gd2.mlb.com/components/game/mlb/year_2013/month_04/day_15/gid_2013_04_15_phimlb_cinmlb_1/linescore.xml'
I/O error: [Errno 2] No such file or directory: 'http://gd2.mlb.com/components/game/mlb/year_2013/month_04/day_15/gid_2013_04_15_slnmlb_pitmlb_1/linescore.xml'

您可以复制粘贴这些网址,并查看这些位置确实存在的文件。我甚至复制了文件&目录到localhost,并尝试将此作为localhost,以防外部服务器有某种块。它给了我同样的错误,所以这不是问题。我想知道Etree's parse()是否无法处理HTTP,但是文档没有说明这一点,所以我猜这也不是问题。

更新:根据评论中的建议,我使用open(),但仍然返回错误。进口&尝试urllib.request.urlopen(url)会返回错误 AttributeError:'module'对象没有属性'request'

1 个答案:

答案 0 :(得分:0)

你是对的,xml.etree不会自动下载和解析网址,如果你想这样做,你需要先自己下载(使用urllib或者请求......)。

文档明确指出parse采用文件名或文件对象,如果它支持网址我肯定会明确说出来。例如,lxml.etree.parse()