解决Python2.7的UnicodeEncodeError: ‘ascii’ codec can’t encode异常错误

今天在看中国大学MOOC好大学在线中Python网络爬虫与信息提取课程的时候,做了一个实例是关于中国大学排名定向爬虫,我贴一下代码:

#encoding:utf-8
import requests
from bs4 import BeautifulSoup
import bs4

def getHTMLText(url):
    r = requests.get(url,timeout = 30)
    r.raise_for_status()
    r.encoding = r.apparent_encoding
    return r.text


def fillUnivList(ulist,html):
    soup = BeautifulSoup(html,"html.parser")
    for tr in soup.find('tbody').children:
        if isinstance(tr,bs4.element.Tag):
            tds = tr('td')
            ulist.append([tds[0].string,tds[1].string,tds[2].string])

def printUnivList(ulist,num):
    print("{:^10}\t{:^6}\t{:^10}".format("排名","学校名称","总分"))
    for i in range(num):
        u=ulist[i]
        print("{:^10}\t{:^6}\t{:^10}".format(u[0],u[1],u[2]))



def main():
    uinfo =[]
    url ='http://www.zuihaodaxue.com/zuihaodaxuepaiming2017.html'
    html = getHTMLText(url)
    fillUnivList(uinfo,html)
    printUnivList(uinfo,20)

main()

但是我在最后在运行的时候出现了
UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 1-4: ordinal not in range(128)
找了一下原因,因为Python调用ascii编码解码程序去处理字符流,当字符流不属于ascii范围内,就会抛出异常(ordinal not in range(128)),但是很神奇的是python3.x是不会出现这个问题的,好吧,说好的python更加稳定呢?

那就找解决方法吧!
解决的方案很简单,修改默认的编码模式,我们可以通过sys.setdefaultencoding(‘utf-8’)来将当前的字符处理模式修改为utf-8编码模式,值得注意的是,如果单纯这么调用的话,Python会抛出一个AttributeError异常:需要调用一次reload(sys)。

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

然后,就ok了。
这位大神的解决方案

你可能感兴趣的:(招聘,python,异常,ascii)