1

web2by によって構築された短縮形で、最初の URL を検証したいのですが、それが有効でない場合は、最初のページに戻り、エラー メッセージが表示されます。これはコントローラー(mvc arch。)の私のコードですが、何が問題なのかわかりません.. !!

import urllib

def index():
    return dict()

def random_maker():
    url = request.vars.url
    try:
        urllib.urlopen(url)
        return dict(rand_url = ''.join(random.choice(string.ascii_uppercase +
                    string.digits + string.ascii_lowercase) for x in range(6)),
                    input_url=url)
    except IOError:
        return index()
4

1 に答える 1

1

httplib を使用して http 応答コードを確認できませんでした。200 の場合、ページは有効です。それ以外 (404 など) またはエラーの場合は無効です。

次の質問を参照してください: URL から HTTP 応答コードを取得する最良の方法は何ですか?

アップデート:

あなたのコメントに基づいて、あなたの問題はエラーの処理方法にあるようです。IOError の問題のみを処理しています。あなたの場合、次のように切り替えることで、すべてのエラーを個別に処理できます。

except:
    return index()

http_default_error をオーバーライドして、独自の例外ハンドラを作成することもできます。詳細については、urllib.urlretrieveで 404 エラーをキャッチする方法を参照してください。

または、特定のエラーがある urllib2 に切り替えることができます。次に、urllib2 がスローする特定のエラーを次のように処理できます。

from urllib2 import Request, urlopen, URLError
req = Request('http://jfvbhsjdfvbs.com')
try:
    response = urlopen(req)
except URLError, e:
    if hasattr(e, 'reason'):
        print 'We failed to reach a server.'
        print 'Reason: ', e.reason
    elif hasattr(e, 'code'):
        print 'The server couldn\'t fulfill the request.'
        print 'Error code: ', e.code
else:
    print 'URL is good!'

上記のコードは次を返します。

We failed to reach a server.
Reason:  [Errno 61] Connection refused

各例外クラスの詳細は、urllib.error API ドキュメントに含まれています。

あなたが何をしようとしているのか正確にはわからないので、これをコードに挿入する方法が正確にはわかりませんが、IOError は urllib によってスローされた例外を処理しません。

于 2012-08-15T18:27:22.590 に答える