首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么Python的urllib2.urlopen()会为成功的状态码引发一个HTTPError?

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

Stack Overflow用户
提问于 2011-08-12 05:11:18
回答 3查看 8.2K关注 0票数 17

根据the urllib2 documentation的说法,

因为默认处理程序处理重定向( 300范围内的代码),而100-299范围内的代码表示成功,所以您通常只会看到400-599范围内的错误代码。

然而,下面的代码

request = urllib2.Request(url, data, headers)
response = urllib2.urlopen(request)

引发代码为201的HTTPError (已创建):

ERROR    2011-08-11 20:40:17,318 __init__.py:463] HTTP Error 201: Created

那么,为什么 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...?

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

还有, else 块应该期待什么?如果成功的状态码都被解释为HTTPError,那么urllib2.urlopen()什么时候会像所有urllib2文档中提到的那样返回一个正常的类似文件的响应对象?

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7032890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档