如何在python中解决startwith上的TypeError?

时间:2015-04-22 08:23:43

标签: python

使用:Python 3.4

我正试图从这里使用维基百科脚本/模块:

http://pastebin.com/FVDxLWNG(wikipedia.py)

http://pastebin.com/idw8vQQK(wiki2plain.py)

我遇到的问题是以下代码:

def article(self, article):
    url = self.url_article % (self.lang, urllib.parse.quote_plus(article))
    content = self.__fetch(url).read()

    if content.upper().startswith("#REDIRECT"): 
        match = re.match('(?i)#REDIRECT \[\[([^\[\]]+)\]\]', content)

        if not match == None:
            return self.article(match.group(1))

        raise WikipediaError('Can\'t found redirect article.')

    return content

如果我运行这个我得到错误:" startwith first arg必须是字节或字节元组,而不是str" ,所以我把它改成

if content.upper().startswith(b"#REDIRECT"): 

它运行正常。然后,我得到" TypeError:不能在类字节对象上使用字符串模式"当我尝试使用它的某个地方。我已经改变了一些脚本在3.4中工作但我似乎没有让这个工作。如何在STARTwith上解决此TypeError问题?

  

文件" C:\ Anaconda3 \ lib \ re.py",第179行,在sub中       return _compile(pattern,flags).sub(repl,string,count)

     

TypeError:不能在类字节对象上使用字符串模式

1 个答案:

答案 0 :(得分:2)

您应该通过正确的编码解码内容。

而不是content = self.__fetch(url).read()试试这个:

result = self.__fetch(url)
content = result.read().decode(result.headers.get_content_charset())