2012-04-18 266 views
1

我正在使用python2.7和lxml。我的代碼如下Python錯誤:'utf8'編解碼器無法解碼位置85中的字節0x92:無效起始字節

import urllib 
from lxml import html 

def get_value(el): 
    return get_text(el, 'value') or el.text_content() 

response = urllib.urlopen('http://www.edmunds.com/dealerships/Texas/Frisco/DavidMcDavidHondaofFrisco/fullsales-504210667.html').read() 
dom = html.fromstring(response) 

try: 
    description = get_value(dom.xpath("//div[@class='description item vcard']")[0].xpath(".//p[@class='sales-review-paragraph loose-spacing']")[0]) 
except IndexError, e: 
    description = '' 

在try中的代碼崩潰,給了一個錯誤

UnicodeDecodeError at/
'utf8' codec can't decode byte 0x92 in position 85: invalid start byte 

不能被編碼的串/解碼爲:ouldnt是

我有嘗試使用許多技術,包括.encode('utf8'),但沒有一個能解決問題。我有2個問題:

  1. 如何解決這個問題
  2. 如何將我的應用程序崩潰的問題時代碼是一個嘗試之間除了
+0

發佈整個回溯,而不僅僅是最後一行。 – Kylotan 2012-04-18 14:14:30

+1

@ Marcin的答案快照。檢查網頁的編碼對調試編碼錯誤非常有用。 [1] [1] [在這裏輸入的形象描述] [1]!]:http://i.stack.imgur.com/jVHTy.png – 2016-01-19 23:27:35

回答

8

此頁面正在提供charset=ISO-8859-1。從該解碼到unicode。

[Snapshot of details from a browser. Credit @Old Panda]

+0

我試過.decode('iso-8859-1'),但仍然崩潰 – 2012-04-18 14:21:41

+1

@mangobug除非你顯示實際的代碼,包括解碼調用,沒有人可以幫你。 – Marcin 2012-04-18 14:28:30

0
    • 跳過錯誤字符,或將其正確解碼爲unicode。
    • 你只能望塵莫及IndexError,不是的UnicodeDecodeError
1

你除了條款只處理IndexError類型的異常。問題是一個UnicodeDecodeError,它不是一個IndexError - 所以這個異常不是由那個except子句處理的。

目前還不清楚'get_value'的作用,這很可能是實際問題出現的地方。

+0

我更新了我的代碼爲 '的get_value' – 2012-04-18 14:22:36

+0

這沒什麼幫助,因爲現在我們只有一個我們不明白的'get_text'函數。而且我們也沒有完整的回溯。你需要提供完整的背景,否則人們只能猜測問題。 – Kylotan 2012-04-18 14:43:55

0
  1. 解碼對unicode的響應,在用fromhtml解析之前正確處理錯誤(忽略錯誤)。

  2. 捕獲UnicodeDecodeError或所有錯誤。

+0

答案不是要捕捉所有的錯誤。這就是你如何隱藏程序中的錯誤。 – agf 2012-04-18 14:27:51

相關問題