Python:urllib2.HTTPError:HTTP 错误 300:多项选择 [英] Python: urllib2.HTTPError: HTTP Error 300: Multiple Choices

查看:33
本文介绍了Python:urllib2.HTTPError:HTTP 错误 300:多项选择的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个脚本,它在网页文本页面中查找信息,然后将它们存储在字典中.该脚本在列表中查找 URL,然后循环处理它们,但是它在此错误的过程中被中断:

I have a script that is looking for informations in web text pages and then store them in a dictionary. The script is looking for URL in a list and then process them all in a loop, however it get interrupted in the middle of the process by this error:

Traceback (most recent call last):
  File "<stdin>", line 3, in <module>
  File "/usr/lib/python2.7/urllib2.py", line 126, in urlopen
    return _opener.open(url, data, timeout)
  File "/usr/lib/python2.7/urllib2.py", line 406, in open
    response = meth(req, response)
  File "/usr/lib/python2.7/urllib2.py", line 519, in http_response
    'http', request, response, code, msg, hdrs)
  File "/usr/lib/python2.7/urllib2.py", line 444, in error
    return self._call_chain(*args)
  File "/usr/lib/python2.7/urllib2.py", line 378, in _call_chain
    result = func(*args)
  File "/usr/lib/python2.7/urllib2.py", line 527, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 300: Multiple Choices

我在解释这个问题时遇到了问题,我不知道是否有办法避免此类问题.有没有办法在脚本中添加异常?

I have problems to interpret that and I don't know if there is a way to avoid this kind of problems. Is there a way to add an exception in the script?

这是我的脚本:

import urllib2
import sys
import re

IDlist = ['C9JVZ1', 'C9JLN0', 'C9J872']  #(there is more than 1500 of them)

URLlist = ["http://www.uniprot.org/uniprot/"+x+".txt" for x in IDlist]

function_list = {}
for id, item in zip(IDlist, URLlist):
    function_list[id] = []
    textfile = urllib2.urlopen(item);
    myfile = textfile.readlines();
    for line in myfile:
        print "line:", line;
        found = re.search('\s[C]:(.+?);', line);
        if found:
            function = found.group(1);
            function_list[id].append(function)

推荐答案

Web 服务器正在返回 HTTP 状态代码 300 Multiple Choices(请参阅 维基百科) 用于您要访问的 URL 之一.这可能意味着您列表中的某个 URL 是错误的,并且网络服务器希望通过提供类似的现有 URL 列表来帮助您.

The web server is returning the HTTP status code 300 Multiple Choices (see Wikipedia) for one of the URLs you want to access. This probably means one of the URLs in your list is wrong and the web server wants to help you by providing a list of similar existing URLs.

一般来说,urllib2 会将任何不成功或不简单的重定向响应转换为异常,这就是您在那里看到的.

In general urllib2 turns anything thats not a success or a simple redirection response into an exception and that's what you see there.

当你不在某个地方处理异常时,例如使用 try-except 块,它通常会终止您的程序.因此,您需要将您对 urlopen 的调用包含在一个 try 块中:

When you don't handle an exception somewhere e.g. with a try-except block it usually terminates your program. So you need to wrap your call to urlopen in a try block:

try:
  textfile = urllib2.urlopen(item);
except urllib2.HTTPError:
  # Do something here to handle the error. For example:
  print("URL", item, "could not be read.")
  continue

这篇关于Python:urllib2.HTTPError:HTTP 错误 300:多项选择的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆