相关疑难解决方法(0)

为什么Python的urllib2.urlopen()会为成功的状态代码引发HTTPError?

根据urllib2文档,

由于默认处理程序处理重定向(300范围内的代码),并且100-299范围内的代码表示成功,因此通常只能看到400-599范围内的错误代码.

然而,以下代码

request = urllib2.Request(url, data, headers)
response = urllib2.urlopen(request)
Run Code Online (Sandbox Code Playgroud)

使用代码201(已创建)引发HTTPError:

ERROR    2011-08-11 20:40:17,318 __init__.py:463] HTTP Error 201: Created
Run Code Online (Sandbox Code Playgroud)

那么为什么要urllib2在这个成功的请求上抛出HTTPErrors呢?

这不是太痛苦; 我可以轻松地将代码扩展到:

try:
    request = urllib2.Request(url, data, headers)
    response = urllib2.urlopen(request)
except HTTPError, e:
    if e.code == 201:
        # success! :)
    else:
        # fail! :(
else:
    # when will this happen...?
Run Code Online (Sandbox Code Playgroud)

但这似乎不是预期的行为,基于文档和我无法找到关于这种奇怪行为的类似问题的事实.

此外,该else块应该期待什么?如果成功的状态代码都被解释为HTTPErrors,那么什么时候urllib2.urlopen()只返回一个类似于文件的正常响应对象,就像所有urllib2文档所指的那样?

python urllib2 http-status-codes

17
推荐指数
2
解决办法
7793
查看次数

标签 统计

http-status-codes ×1

python ×1

urllib2 ×1