随笔记之Python2与Python3编码小别
来源:互联网 发布:java 16进制颜色转rgb 编辑:程序博客网 时间:2024/05/01 16:50
今天在写爬虫代码爬取网页时,遇到了一个有关Python编码的问题。通过这个问题,发现了一个Python3的优势,或者说是长处。
在处理同样的事务时,同样的文字,Python2需要额外加一些处理。
比如:
两段代码都含有这句话开头
#-*- coding:utf-8 -*-
在使用selenium库中的send_keys(key)
方法时,如果key为汉字,Python2中需要在key前加“u”来做处理,如,u”开心”,而Python3则不需要做任何处理。
Python2中如果不做处理,会出现如下错误:
UnicodeDecodeError: 'utf8' codec can't decode byte 0xe9 in position 0: unexpected end of data
还有在写文件时,同样会出现一些编码问题。
当我使用Python2往一个文件中写如爬取的网页的源码时,出现如下错误:
UnicodeEncodeError: 'ascii' codec can't encode characters in position 174-178: ordinal not in range(128)
寻找解决方案时,有许多说法,在尝试使用这些方法解决问题时,发现了一个Python2与Python3有差异的地方。
在Python2下此问题的解决办法为:
import sysreload(sys)sys.setdefaultencoding("utf-8")
有说使用f = open("xxx.txt", "w", encoding="utf-8")
来解决此问题,可是却会报出SyntaxError: invalid syntax
错误。
其实后一个解决方案是python3适用的解决办法,在搜解决方案时,有些博主没有说明,使自己对问题感觉莫名其妙。
在这个问题上,我还尝试使用python2的解决方案来解决python3的问题,却报出NameError: name 'reload' is not defined
的错误。查找资料发现,python3把reload()方法封装到imp模块中,如果使用需要提取引用from imp import reload
。引入reloa
之后,又报出AttributeError: module 'sys' has no attribute 'setdefaultencoding'
属性错误。很明显这个解决方案不可行。
总的来说,感觉python3在细节上处理的更好了,对程序员更友善,需要考虑的细节少了。
- 随笔记之Python2与Python3编码小别
- Python2与python3中的编码问题
- Python2与Python3的编码问题
- Python2与Python3的编码区别
- python2与python3的字符串编码对比
- Python2与Python3的版本之争
- python2 与python3中最大的区别(编码问题
- 关于Python2.X与Python3.X的编码问题
- python2和python3编码区别
- python2和python3编码区别
- python3 与 python2区别
- python2 与Python3
- Python3与Python2的坑之unicode/str
- python3与python2代码差别
- Python2与Python3的区别
- python2 与 python3 语法区别
- python2 与 python3 语法区别
- python2与python3的区别
- mybatis添加扫描.xml文件
- 第十二周 拓扑排序算法验证
- mybatis抛出ORA-01745: 无效的主机/绑定变量名
- Java中Collection和Collections的区别
- Unity3d同时接入Mob平台的SMSSDK和ShareSDK时的坑
- 随笔记之Python2与Python3编码小别
- “自顶向下,逐步求精”
- Bootstrap 模态框(Modal)插件数据传值
- 2.Redis安装(Linux平台)
- openCV RGB转HSV函数解析
- 真诚与尊重是技术团队的管理要点
- C/C++中volatile关键字详解
- vmware虚拟机更改MAC地址方法
- 异常处理