python UnicodeDecodeError 更改logging 源码解决


Python报UnicodeDecodeError 是常有的事...这次是在win7 下运行,打印日志报错了。更改日志源码加上 

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

      也还是无法显示,打印到控制台看具体的错误信息是

2017-07-12 12:29:03 [easyspider.middlewares.retry] DEBUG: Retrying <GET h
ttp://app1.sfda.gov.cn/datasearch/face3/content.jsp?tableId=89&tableName=TABLE89
&Id=1780> (failed 1 times): An error occurred while connecting: 10053: 您的主机
中的软件中止了一个已建立
Traceback (most recent call last):
  File "D:\hang.zhang\anaconda\lib\logging\__init__.py", line 903, in emit
    stream.write(fs % msg[:-8].encode("UTF-8"))
UnicodeDecodeError: 'utf8' codec can't decode byte 0xc4 in position 224: invalid
 continuation byte
Logged from file retry.py, line 30

   中文的表述,软件终止了连接,或者还有一种情况是套接字终止了连接。(出现这种情况是我故意在运行的时候断网让连接中断导致的)

    要把这个信息写入日志,估计要转码才行,定位到logging的903行,给他加上一个try except 捕获


try:
    stream.write(fs % msg.encode("UTF-8"))
except UnicodeError:
    stream.write(fs % msg.decode("gbk").encode("UTF-8"))


   先解码gbk 然后再编码utf8


  可以看到之前的代码就是在 Unicode error 的时候来编码utf8, 这里再给他一个判断,如果编码utf8 还错了,应该就是对应到了windows平台,给他再来个 decode("gbk") 就可以了 


   这样子所有的日志信息就都被记录下来了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值