1

私は次のコードを持っています(gdaten [n] [2]はURLを与え、nはインデックスです):

    try:
        p=urlparse(gdaten[n][2])
        while p.scheme == "javascript" or p.scheme == "mailto":
            p=urlparse(gdaten[n][2])
            print(p," was skipped (", gdaten[n][2],")")
            n += 1
        print ("check:", gdaten[n][2])
        f = urllib.request.urlopen(gdaten[n][2])
        htmlcode = str(f.read())
        parser = MyHTMLParser(strict=False)
        parser.feed(htmlcode)

    except urllib.error.URLError:
        #do some stuff
    except IndexError:
        #do some stuff
    except ValueError:
        #do some stuff

今、私は次のエラーがあります:

urllib.error.URLError: <urlopen error unknown url type: javascript>

8行目。それはどのように可能ですか? while-loop を使用すると、スキーム javascript を使用してこれらのリンクをすべてスキップすると思いましたか? 例外が機能しないのはなぜですか? 私のせいはどこですか? MyHTMLParserウェブサイトで見つかったリンクをそのように gdaten に追加します[[stuff,stuff, link][stuff,stuff, link]

4

1 に答える 1

3

これはオフバイワンエラーです。

つまり、npは同期していません。

これを修正するには、n設定の前に 1 を追加しますp

なぜこれが機能しなかったのですか?

が開始時にゼロに設定されていると仮定するとn( で開始できますが42、問題ではありません)、gdaten が次のようにレイアウトされているとします。

gdaten[0][2] = "javascript://blah.js"
gdaten[1][2] = "http://hello.com"
gdaten[2][2] = "javascript://moo.js"

最初の while 条件をチェックすると、p.scheme は'javascript'ループに入ります。再びp設定され、1 に増加します。再度チェックしているので、再びループに進みます。urlparse("javascript://blah.js")nurlparse("javascript://blah.js")

pに設定されurlparse("http://hello.com")nに設定され2ます。

チェックをパスしたのでurlparse("http://hello.com")、while ループは終了します。

一方、nは 2 つなので、開かれる URL はgdaten[2][2]どちらかです。"javascript://moo.js"

コード修正

try:
    p=urlparse(gdaten[n][2])
    while p.scheme == "javascript" and p.scheme == "mailto" and not p.scheme:
        print(p," was skipped (", gdaten[n][2],")")

        # Skipping to the next value
        n += 1
        p=urlparse(gdaten[n][2])

    print ("check:", gdaten[n][2])
    f = urllib.request.urlopen(gdaten[n][2])
    htmlcode = str(f.read())

...
于 2013-10-24T18:43:21.957 に答える