0

我在 Mechanize 中遇到了一个有趣的错误,我不确定将其作为错误提交,或者需要寻找解决方法。

打开(错误地?)包含带有十六进制代码的转义字符的页面会导致 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')

经过长时间的 Traceback 后,报告如下:

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),而这个页面使用的是十六进制代码 #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 回答