2012-07-12 47 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