2012-04-18 178 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

相关问题