如何在Python中隐藏警告?

时间:2013-11-18 18:54:01

标签: python beautifulsoup

代码:

req = Request(url, headers={'User-Agent': 'Mozilla/5.0'})
c = urlopen(req).read()
soup=BeautifulSoup(c)

我收到了警告:

  

警告:root:某些字符无法解码,并被替换为REPLACEMENT CHARACTER。

我尝试了.decode('utf-8'),但它给了:

  

UnicodeDecodeError:'utf-8'编解码器无法解码位置421中的字节0xe7:无效的连续字节

如何捕获此警告,因此它不会显示在Python IDLE shell中?

在代码中使用warnings.simplefilter("ignore")时:

def getimage(url,source):
    req = Request(url, headers={'User-Agent': 'Mozilla/5.0'})
    c = urlopen(req).read()
    soup=BeautifulSoup(c)
    m = soup.find('div',{'rel' : 'image_src'})
    return m['href'] 

with warnings.catch_warnings():
    warnings.simplefilter("ignore")
    getimage(url,source)

我明白了:

  

NameError:名称'url'未定义

我从另一个Python文件调用函数'getimage'。

2 个答案:

答案 0 :(得分:1)

我得到了这个警告,然后通过了它:

FromRaw = lambda r: r if isinstance(r, unicode) else r.decode('utf-8', 'ignore')

也就是说,在汤解析之前将原始HTML传递给它:

c = urlopen(req).read()
c = FromRaw(c)
soup=BeautifulSoup(c)

在任何情况下都可以对UnicodeEncodeErrorUnicodeDecodeError进行防弹python。以上是其中的一半。

答案 1 :(得分:0)

我相信你会找到一个关于这个确切主题here的相当全面的指南,解释警告的类型以及如何处理它们;一种类型具体为Unicode Warning。我希望这有帮助!

快乐的编码。