2012-01-04 5 views
13

解決方法が見つからないような奇妙なエラーが発生しています。Python/Django "BadStatusLine"エラー

このエラーは、このコードセグメントを実行するたびに発生するものではなく、同じループ(ループ内で発生します)を繰り返しても発生しません。十分に動かせば、エラーに遭遇しておらず、プログラムが正常に実行されます。それにもかかわらず、私はまだこれがなぜ起こっているのか把握したいと思う。 URLが明らかに.... URLです

page = urllib2.urlopen(url) 

http://dpaste.com/681658/

私のコードに次の行で発生するようです:ここで

はバージョン、トレースなど、私の誤りです。

私のコードにはimport urllib2があります。

答えて

29

BadStatusLineurllib2.urlopen(url)を呼び出すと例外が発生し、リモートサーバーはPythonが理解できないステータスコードで応答します。

urlを制御しないと仮定すると、これを防ぐことはできません。あなたができることは、例外をキャッチし、それを正常に管理することだけです。他のユーザーからの

from httplib import BadStatusLine 

try: 
    page = urllib2.urlopen(url) 
    # do something with page 
except BadStatusLine: 
    print "could not fetch %s" % url 
7

これはDjangoとは関係ありません。あなたのURLを取得した後に応答を解析できなかったurllib2によってスローされた例外です。ネットワークの問題、不正な形式の応答などがあります。この種のエラーは、サーバー/アプリケーションによってはランダムに発生するものがあります。このURLが返すものを制御しない場合、例外をキャッチして残しておきます。どのURLが問題を引き起こしているのかをデバッグし、パターンを特定しようとしています。

7

説明右と良いですが、実際には、あなたが、これは便利かもしれません。私の経験で
あなたがスペースやその他を含む値のように、URLパラメータに引用符で囲まれていない値を送信しているとき、これは通常起こります引用符やURLをエンコードする必要がある文字。

+1

実際に、適切なURLエンコーディングなしで値を送信すると、400回の不正なリクエストが発生します。 –

+0

おそらくサーバーが間違って設定されていて(私が書いたような)、400の代わりに何も送り返されません。これはBadStatusLineです。 – Noumenon

+0

私の場合は、送信されたヘッダーに '\ n' –