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") 就可以了
这样子所有的日志信息就都被记录下来了