即使调用成功,urllib2.open也会发出500 HTTPError异常

时间:2014-02-20 16:22:25

标签: python python-2.7 urllib2

我正在使用urllib2来访问URL并读取数据。 urlopen调用是尝试除了下面的块之外。我在网站上看到其他问题说他们遇到了这个500错误,但我找不到具体的答案,为什么即使通话成功我们也会得到这500个例外。任何人都可以详细说明或指出遇到它的方法吗?

            try:
                data = urllib2.urlopen(url).read().split('\n')
            except urllib2.HTTPError, e:
                print "Could not get data with url {0} due to error code {1}.".format(url,e.code)
            except urllib2.URLError, e:
                print "Could not get data with url {0} due to reason {1}.".format(url,e.reason)
                sys.exit(1)

2 个答案:

答案 0 :(得分:1)

HTTP错误500是服务器错误(https://en.wikipedia.org/wiki/List_of_HTTP_status_codes)。您应该调查服务器端日志

答案 1 :(得分:0)

您收到服务器端错误。

您需要检查错误(e)以查看是否有任何关于导致错误的反馈。它通常包含服务器中的一些实际错误数据。并非所有服务器都会返回错误数据,有时它只是在服务器日志上。

如果这是在守护进程上运行,或偶尔运行,你可以编写一些记录e内容的东西。

您还可以使用pdb.set_trace()设置断点并自行检查对象。

同样,虽然这条线看起来很棒:

 data = urllib2.urlopen(url).read().split('\n')

在调试和故障排除过程中真的很痛苦,使用urllib时会发生很多事。

我建议将它分成几行,如下

url_obj = urllib2.urlopen(url)
data = url_obj.read()
data = data.split('\n')

如果您使用pdbpdb.set_trace())输入几个断点,则可以代替每个变量。

因为你没有使用自定义开启工具,所以我也只使用requests库,它只包装urllib并使它不那么可怕。