朱皮特的博客 自由的飞翔

Python2转Python3需要做哪些改动?

2018-03-20
朱皮特
阅读量:

print

同时兼容Python2和Python3的使用方式:

print()

异常

同时兼容Python2和Python3的使用方式:

try:
	pass
except Exception as e:
	pass

StringIO

from io import StringIO 或者import io 使用的时候:io.StringIO

unicode

这个没了,这个算是Python2比较麻烦的地方,特别是在Windows下开发经常需要转换:

# win下命令行参数为gbk编码:star.gbk2unicode(sys.argv[1]) + u'也有'
def gbk2unicode(s):
    return s.decode('gbk', 'ignore')

# 脚本文件#coding:utf-8时默认不带u的字符串为utf8字符串:star.utf82unicode('我')
def utf82unicode(s):
    return s.decode('utf-8', 'ignore')

# 带u的字符串为unicode
# star.unicode2gbk(u'\u4e5f\u6709')
# star.unicode2gbk(u'也有')
def unicode2gbk(s):
    return s.encode('gbk')

# 带u的字符串为unicode
# star.unicode2utf8(u'\u4e5f\u6709')
# star.unicode2utf8(u'也有')
def unicode2utf8(s):
    return s.encode('utf-8')

# win下命令行参数为gbk编码:star.gbk2utf8(sys.argv[1]) + '也有'
def gbk2utf8(s):
    return s.decode('gbk', 'ignore').encode('utf-8')

def utf82gbk(s):
    return s.decode('utf-8', 'ignore').encode('gbk')

但是在Python3下面不需要了。

str与bytes

python3最重要的新特性也是对文本和二进制数据做了更清晰的区分。虽然没了unicode的转换,但是多了str与bytes的转换,如果出现下面异常:

a bytes-like object is required, not 'str'

你需要将字符串转换为字节:

bytes(str, 'UTF-8')

如果出现下面异常:

must be str, not bytes

你需要将字节转换为字符串:

str(t.read(),"utf-8")

python有两种类型转换的函数encode(),decode() 。

encode(编码),可以将str类型编码为bytes。 
decode(译码),可以将bytes类型转换为str类型。

引用py文件(import)

同目录下的py文件引用,使用.(点)。

  • 引用同目录下的py文件中的某个类:from .AXMLPrinter import AXMLPrinter
  • 应用同目录下的py文件中的所有:from . import Constant

上一篇 新生儿黄疸

Comments

Content