gpt4 book ai didi

python - feedparser 在脚本运行期间失败,但无法在交互式 python 控制台中重现

转载 作者:行者123 更新时间:2023-12-01 06:16:49 25 4
gpt4 key购买 nike

当我运行 eclipse 或在 iPython 中运行我的脚本时,它会失败:

'ascii' codec can't decode byte 0xe2 in position 32: ordinal not in range(128) 

我不知道为什么,但是当我简单地使用相同的 url 执行 feedparse.parse(url) 语句时,没有抛出错误。这让我很为难。

代码很简单:

      try:
d = feedparser.parse(url)
except Exception, e:
logging.error('Error while retrieving feed.')
logging.error(e)
logging.error(formatExceptionInfo(None))
logging.error(formatExceptionInfo1())

这是堆栈跟踪:

d = feedparser.parse(url)


File "C:\Python26\lib\site-packages\feedparser.py", line 2623, in parse
feedparser.feed(data)
File "C:\Python26\lib\site-packages\feedparser.py", line 1441, in feed
sgmllib.SGMLParser.feed(self, data)
File "C:\Python26\lib\sgmllib.py", line 104, in feed
self.goahead(0)
File "C:\Python26\lib\sgmllib.py", line 143, in goahead
k = self.parse_endtag(i)
File "C:\Python26\lib\sgmllib.py", line 320, in parse_endtag
self.finish_endtag(tag)
File "C:\Python26\lib\sgmllib.py", line 360, in finish_endtag
self.unknown_endtag(tag)
File "C:\Python26\lib\site-packages\feedparser.py", line 476, in unknown_endtag
method()
File "C:\Python26\lib\site-packages\feedparser.py", line 1318, in _end_content
value = self.popContent('content')
File "C:\Python26\lib\site-packages\feedparser.py", line 700, in popContent
value = self.pop(tag)
File "C:\Python26\lib\site-packages\feedparser.py", line 641, in pop
output = _resolveRelativeURIs(output, self.baseuri, self.encoding)
File "C:\Python26\lib\site-packages\feedparser.py", line 1594, in _resolveRelativeURIs
p.feed(htmlSource)
File "C:\Python26\lib\site-packages\feedparser.py", line 1441, in feed
sgmllib.SGMLParser.feed(self, data)
File "C:\Python26\lib\sgmllib.py", line 104, in feed
self.goahead(0)
File "C:\Python26\lib\sgmllib.py", line 138, in goahead
k = self.parse_starttag(i)
File "C:\Python26\lib\sgmllib.py", line 296, in parse_starttag
self.finish_starttag(tag, attrs)
File "C:\Python26\lib\sgmllib.py", line 338, in finish_starttag
self.unknown_starttag(tag, attrs)
File "C:\Python26\lib\site-packages\feedparser.py", line 1588, in unknown_starttag
attrs = [(key, ((tag, key) in self.relative_uris) and self.resolveURI(value) or value) for key, value in attrs]
File "C:\Python26\lib\site-packages\feedparser.py", line 1584, in resolveURI
return _urljoin(self.baseuri, uri)
File "C:\Python26\lib\site-packages\feedparser.py", line 286, in _urljoin
return urlparse.urljoin(base, uri)
File "C:\Python26\lib\urlparse.py", line 215, in urljoin
params, query, fragment))
File "C:\Python26\lib\urlparse.py", line 184, in urlunparse
return urlunsplit((scheme, netloc, url, query, fragment))
File "C:\Python26\lib\urlparse.py", line 192, in urlunsplit
url = scheme + ':' + url
File "C:\Python26\lib\encodings\cp1252.py", line 15, in decode
return codecs.charmap_decode(input,errors,decoding_table)

部分解决:

当传递给 feedparser.parse() 的 URL 是 unicode 时,这是可重现的。当它是 ascii URL 时,它不会重现。郑重声明,您需要一个包含一些高字符 Unicode 字符的 Feed。我不确定这是为什么。

最佳答案

看起来给您带来问题的网址包含具有某种编码的文本(例如latin-1,其中0xe2将是“小写a,顶部有一个圆圈”,又名â ),没有正确的内容类型 header (它应该在 Content-Type: 中有一个 charset= 参数,但没有)。

如果是这种情况,feedparser 无法猜测编码,会尝试默认值 (ascii),但会失败。

this part feedparser 的文档更详细地解释了这些问题。

不幸的是,没有“ Elixir ”来解决这个普遍问题(由于破坏了 XML 规则的 bozos)。您可以 try catch 此异常,并在处理程序中单独读取 url 的内容(使用 urllib2 )并尝试使用各种可能的编码对其进行解码 - 然后当您最终以这种方式获得可用的 unicode 对象时,输入thatfeedparser.parse(其第一个参数可以是 url、文件流、带有数据的 unicode 字符串)。 p>

关于python - feedparser 在脚本运行期间失败,但无法在交互式 python 控制台中重现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2857450/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com