2012-07-12 62 views
0

解决我遇到的机械化一个有趣的错误,其中我不确定提交它作为一个错误,或者需要寻找一个解决办法。Python的机械化 - unescape_charref()不能与十六进制代码

打开(错误地?)包含带十六进制代码的转义字符的页面会导致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。有没有办法让机械处理正确处理?

我其实并没有太在意在这种情况下适当的转义,因为我只想从这些页面的head元素中检索URL。我想赶上ValueError并继续获得回应。不幸的是,Mechanize无法处理这个并返回None。

回答

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