我在 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。