0

Mechanize で興味深いエラーが発生しましたが、これをバグとして送信するか、回避策を探す必要があるかはわかりません。

(誤って?) 16 進コードでエスケープされた文字を含むページを開くと、ValueError が発生します。次のコードは、エラーを再現します。

import mechanize
b = mechanize.Browser()
gr = 'http://www.goodreads.com/'
b.open(gr + 'book/show/613791.Santuario_De_La_Pen_X303_A_De_Francia')

長いトレースバックの後、以下が報告されます。

File "C:\Python27\lib\site-packages\mechanize\_html.py", line 317, in unescape_charref
  uc = unichr(int(name, base))
ValueError: invalid literal for int() with base 10: 'X303'

これは unescape_charref() がバイナリ文字コード (例: #771) を期待していることが原因だと思います。このページでは 16 進コード #X303 が使用されています。Mechanize にこれを適切に処理させる方法はありますか?

このようなページの head 要素内から URL を取得したいだけなので、この場合の適切なエスケープ解除についてはあまり気にしません。ValueError をキャッチして、応答を取得し続けたいと思います。残念ながら、Mechanize はこれに対処できず、None を返します。

4

1 に答える 1

0

あなたはそれを報告するべきです。

短期的には、ソースファイルのその行を次のように変更できます。

try:
    uc = unichr(int(name, base))
except ValueError:
    if base == 10 and name[0].lower() == "x":
        uc = unichr(int(name[1 : ], 16))
    else:
        raise
于 2012-07-12T14:30:18.573 に答える