您的位置:首页 > 编程语言 > Python开发

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

2017-04-09 22:08 381 查看
今天在看中国大学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
相关文章推荐