デフォルト・ハンドラは、100から299の範囲内のリダイレクト(300の範囲のコード)、およびコードを扱う成功を示しているので、あなたは通常は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
ドキュメントのように通常のファイルのような応答オブジェクトを返しますか?urllib2.urlopen()
は、
それは201から299の間で応答コードを参照することは本当に珍しいです。 urllib2は完全にそれらを処理していません。 – Leopd
何か不足していますか? 201はうまく動作します... – Santa
@Santa、dcrostaの答えに従って非標準のハンドラを使用していますか? – rubergly