Python 常见错误处理 -更新中

1. csv.Error: line contains NULL byte

  • 可能的原因: 文件包含空字符串: “\0” or “\x00”
  • 可行的解决方案:把出错的文件中所有的行全部都去掉\0和\x00字符串。
with open(csv_file, 'rb') as fin:
	reader = csv.reader((line.replace('\0', '').replace('\x00', '') for line in fin))

2. UnicodeDecodeError: ‘ascii’ codec can’t decode byte …

  • 可能的原因:在decode的时候,没有使用对应字符串正确的编码格式来decode。因为python2中默认编码格式为ascii,所以这种情况一般出现在python2中。
  • 出现错误的情形:在下面的例子中,s.encode('gbk')等同于s.decode(defaultencoding).encode('gbk'),所以s.decode('ascii')自然就会出错了。
s = '人生'
s.encode('gbk')
  • 可行的解决方案:
    1 明确原字符串的编码格式,有目标的使用decode方法
    2 文件头声明编码# -*- coding: utf-8 -*-(如果s为unicode)
    3 重载默认编码
reload(sys)
sys.setdefaultencoding('utf-8')
  • 补充:文件头声明编码# -*- coding: utf-8 -*-的作用(目前两个)
    1 代码中的中文均需要utf-8的文件头声明
    3 初始化unicode对象时所用的编码格式,比如u'人生'

3. requests里面的编码问题

  • 可能的原因:requests是我最常用到的爬虫http客户端包,能够非常好的模拟发送请求时的情形。在requests的返回值response中,有两个存放内容的属性,text和content,content比较好理解,返回的是字节码格式,但text不同,会根据一个encoding的属性来对字符串进行解码,这个encoding属性如果不去规范它,就会随意使用encoding来解码text,导致乱码。
  • 可行的解决方案:在一开始我们就去规定好encoding这个属性的值,或者只用content字节码。
import requests
url="http://xxx.xxx.xxx"
response=requests.get(url)
response.encoding='gbk'
print(response.text)

4. BOM(u’\ufeff’)头导致的相等判定错误

当BOM头混在string和unicode里面的时候,会没办法打印出来看到,所以需要特别注意,当两个字符串没法相等,但是打印出来的结果一模一样的时候,打印unicode看看。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值