我在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')
经过长时间的追溯,报告了以下内容:
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正确处理这个问题?
在这种情况下,我实际上并不太关心正确的unescaping,因为我只想从这些页面的head元素中检索一个URL。我想捕获ValueError并继续获取响应。不幸的是,Mechanize无法处理此问题并返回无。
答案 0 :(得分: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