-1

Webサイトを解析するための小さなクラスを作成しました。

URLError例外があります:

def visit(self, url, referer=None, data=None):

    (...)

    # Return BeautifulSoup instance.
    try:
        return BeautifulSoup(self.opener.open(self.request))
    # URLError.
    except urllib.error.URLError as error:
        return error

すべてが正常に動作します。しかし、私はこの関数のラッパーを作成する必要があります。

def get_links(self, *args, **kwargs):

    # Get links with BeautifulSoup.
    self.links = self.visit(*args, **kwargs).find_all('a')

Get_links関数は、URLError(403、404など)が発生するまでも正常に機能します。どうすればこの問題を解決できますか?継承の例外として何かありますか?

4

1 に答える 1

2

あなたの関数は例外をキャッチし、あなたが呼び出してvisit()いるオブジェクトを返しますが、それは持っていません。URLErrorfind_all()

次の行の何か:

self.links = self.visit(*args, **kwargs)
if not isinstance(self.links, urllib.error.URLError):
    self.links = self.links.find_all('a')
else:
    # Do something with an HTTP Error

フローのアイデアを提供する必要があります。get_links()すでにキャッチされてvisit()おり、単に返されるため、アウターでその例外をキャッチすることはできません。

でキャッチしたい場合はget_links()変更

return error

raise error

あなたのvisit()メソッドでは、キャッチしたばかりの例外を再びスローすることになりますが、これがあなたが望む動作であるかどうかはわかりません。

于 2012-08-11T23:19:18.187 に答える