python2与python3使用差异汇总

  • py3 cv2模块保存中文路径
cv2.imencode('.jpg', frame)[1].tofile('中文/1.jpg') #imwrite中文乱码
  • sys.out不可同时出现在不同文件,否则报错‘ValueError: I/O operation on closed file.’
if int(sys.version[0])==3:
    sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') #中文输出
json.loads(str(self.request.body, encoding='utf-8'))
  • py3中文print异常:UnicodeEncodeError: 'ascii' codec can't encode characters in position 7-10: ordinal not in range(128)
import io, sys
if int(sys.version[0])==3:
    sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
  • 文本读取,py3中不适用utf-8时,报错:UnicodeEncodeError: 'gbk' codec can't encode character: illegal multibyte sequence
with open(txt, 'r') as f:   #py2
  buffs = f.realines()

with open(txt, 'r', encoding='utf-8') as f: #py3
  buffs = f.readlines()
  • 文件读取, py3 报错 UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
with open(imagePath, 'r') as f:  #py2
	imageBin = f.read()

with open(imagePath, 'rb') as f:  #py3
	imageBin = f.read()
key='tmp'
if int(sys.version_info[0]) == 3:
    headers={'Authorization':'Basic' + base64.b64encode(key.encode()).decode()}
else:
    headers = {'Authorization': 'Basic' + base64.b64encode(key)}
  • 类继承
class mask_rcnn_outputs(nn.Module):
    def __init__(self, dim_in):
        super(mask_rcnn_outputs, self).__init__()   #python2


class mask_rcnn_outputs(nn.Module):
    def __init__(self, dim_in):
        super().__init__()              #python3
  • 模块加载
import sys
if int(sys.version[0])==2:
    import cPickle
    import json
    import urllib
else:
    import pickle as cPickle
    import simplejson as json
    import urllib.request as urllib
方法1:转换编码为unicode
 Either transform into Unicode (json.dumps(x.decode("utf-8"))), 
 or into an integer array (json.dumps(list(x))).

方法2:pip3 install simplejson

import simplejson as json
  • 除法运算差异,这也是py2转py3常遇到的问题
>>> 1/2        #py2
0


>>> 1/2        #py3
0.5
>>> 1//2
0

参考文献:

  1. TypeError: a bytes-like object is required, not 'str' when writing to a file in Python3

  2. 'urllib' object has no attribute 'urlretrieve'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值