IOError: [Errno socket error] [Errno 11004] 获取地址信息失败

2 投票
1 回答
15231 浏览
提问于 2025-04-17 11:53

我是一名初学者,正在学习Python编程。我的环境是2.7.2版本,Windows 7,使用内置的解释器,还有三个库。我在尝试做某件事情时遇到了错误。希望能得到一些帮助。

import os
import urllib
import socket

DISNEY_URL = 'http://www.sec.gov/Archives/edgar/data/1001039/000119312511321340/dis-20111001.xml'
#Neither of these seem to work when opening with urllib.urlopen becaue of the error:
#I/O error(socket error): [Errno 11004] getaddrinfo failed

DISNEY_LOCAL = 'file://C:/Users/Nate/Desktop/Education/python_education/xbrlnexusfiles/xbrlfiles/dis-20111001.xml'
DISNEY_LOCAL_NONE = 'file://C:/Users/Nate/Desktop/Education/python_education/xbrlnexusfiles/xbrlfiles/dis.txt'


class SECFilingPackage(object):

    def __init__ (self, SEC_URL):
        URLFilePath, URLFileExt = os.path.splitext(SEC_URL)
        try:
            urllib.urlopen(SEC_URL)
        except IOError as (errno, strerror):
            print "I/O error({0}): {1}".format(errno, strerror)
            #This error throws, see it copied above;

DisneyPackage = SECFilingPackage(DISNEY_LOCAL_NONE)

我遇到这个错误: 输入/输出错误(socket错误):

[错误号 11004] getaddrinfo失败

是的,那个位置的文本文件是存在的。文本文件的内容是“Nothing”。

错误追踪信息显示最后一次调用是在open_ftp的第516行,文件路径是C:/Python27/Lib/urllib.py

host = socket.gethostbyname(host)
IOError: [Errno socket error] [Errno 11004] getaddrinfo failed

我可以正常打开网址,所以我认为这不是一个代理/防火墙问题(我也不太理解这个)。

而且我不明白换行符或结束符和这个问题有什么关系。

我相信它应该能正常工作,因为在urllib的文档中提到:

如果URL没有方案标识符,或者它的方案标识符是file:,那么这会打开一个本地文件(没有通用换行符);否则,它会打开一个到网络上某个服务器的socket连接。

(我觉得这只是意味着那些期望通用换行符的人会失望,因为他们已经在那儿转换过了。)

另外,我也对“如果没有方案标识符”的部分有异议,因为如果我不在字符串前加上file://,我会得到:

IOError: [错误号 url错误] 未知的url类型: 'c'

我想“学会钓鱼”,也就是说,能不能告诉我有没有办法调试urllib.py,至少能理解这些值?我可以用eclipse来做吗?它总是让我进入一个项目。

1 个回答

2

不要用 file://<文件名> 这种写法,应该用 file:///<文件名>(注意多了一个斜杠)。

另外,urllib.urlopen 这个方法已经不推荐使用了,建议你用 urllib2.urlopen 来代替。

撰写回答