为什么要从py3到py2

背景:之前自学写过一些py3,而且我写的工具是基于python3来写的,但是公司项目是使用python2版本,希望已有工具或者新写的工具能同时在py2和py3上执行,所以记录此踩坑篇。

常见踩坑

python3中print要输出的内容要加上(),比如py2:print xxx,而py3: print(xxx)

Python 版本 2.7 不 支持 'F' 前缀,就是不支持这种格式化的方法

查看:python - Python3 f string alternativ in Python2 - Stack Overflow

py2没有xmlrpc.client?

第三方库

GitPython用来在python中操作git,但python2.7只能使用GitPython 2.x,而新版本3.x只支持python3

路径

路径在py2中需要重新编码,比如:

if str.find(blob.abspath, "markdown_blogs") <= 0:				#python3直接用,encode反而出错,需要查下
if str.find(blob.abspath.encode('gbk'), "markdown_blogs") <= 0: #python2要encode

迭代器

generators的迭代器方法在python2中为__next__(),而python3中为next()

文本读取出错

编码出错

with open(path_cfgfile, "w", encoding="utf-8") as f:
json.dump({}, f)

上面这段代码报如下错误:(<type 'exceptions.TypeError'>, TypeError("'encoding' is an invalid keyword argument for this function",), <traceback object at 0x0376F5D0>)

另一个错误:

for mdfile in glob.glob(path_draft + "*.md"):
title, postid, publish = post_art(mdfile.decode("utf-8"), False)

python2和python3 with open as f写中文乱码_QuantSun的博客-CSDN博客

向后移植将Python 3 open(encoding =“ utf-8”)移植到Python 2 (qastack.cn)

中文文件名读取出来是乱码

原始文件名:大文件日志查看工具.md,打印出来:./article_draft\���ļ���־�鿴����.md

和这篇文章讲到的还不一样python(2)中文编码乱码问题_湘不香博士的博客-CSDN博客

最后可以参考这篇文章《处理Python2.7的中文乱码问题 - 简书 (jianshu.com)

最后的解决办法是在pycharm的控制台下是乱码,但是powshell则是正常的

从python3到python2的踩坑的更多相关文章

  1. Ubuntu16.04编译安装tensorflow,2018最新血泪踩坑之后的全面总结!绝对成功!【转】

    本文转载自:https://blog.csdn.net/pzh11001/article/details/79683133 大家好,我是 (深度学习硬件DIY总群)(719577294)群主:    ...

  2. Spark踩坑记——从RDD看集群调度

    [TOC] 前言 在Spark的使用中,性能的调优配置过程中,查阅了很多资料,之前自己总结过两篇小博文Spark踩坑记--初试和Spark踩坑记--数据库(Hbase+Mysql),第一篇概况的归纳了 ...

  3. CentOS7.4安装MySQL踩坑记录

    CentOS7.4安装MySQL踩坑记录 time: 2018.3.19 CentOS7.4安装MySQL时网上的文档虽然多但是不靠谱的也多, 可能因为版本与时间的问题, 所以记录下自己踩坑的过程, ...

  4. OpenCV+Qt+CMake安装+十种踩坑

    平台:win10 x64+opencv-3.4.1 + qt-x86-5.9.0 + cmake3.13.4 x64 OpenCV+Qt+CMake安装,及目前安装完后打包:mingw32-make时 ...

  5. [转] Jenkins pipeline 踩坑集合

    [From] https://testerhome.com/topics/10328 前言 最近由于项目需要,接触到了Jenkins 2.0版本,其中最重要的特性就是提供了对pipeline的支持.简 ...

  6. python发布包到pypi的踩坑记录

    前言 突然想玩玩python了^_^ 这篇博文记录了我打算发布包到pypi的踩坑经历.python更新太快了,甚至连这种发布上传机制都在不断的更新,这导致网上的一些关于python发布上传到pypi的 ...

  7. Faster_Rcnn在windows下运行踩坑总结

    Faster_Rcnn在windows下运行踩坑总结  20190524 今天又是元气满满的一天! 1.代码下载 2.编译 3.下载数据集 4.下载pre-train Model 5.运行train ...

  8. 使用impala连接hive踩坑过程

    一.打包镜像出错 docker build总是出错,如果你用的是python3.7,可以考虑使用python3.6版本 并且注意:选择thrift-sasl==0.2.1,否则会出现: Attribu ...

  9. SUCTF 2019 Upload labs 2 踩坑记录

    SUCTF 2019 Upload labs 2 踩坑记录 题目地址 : https://github.com/team-su/SUCTF-2019/tree/master/Web/Upload La ...

  10. 树莓派4B踩坑指南 - (15)搭建在线python IDE

    今天想在树莓派上自己搭一个在线的python IDE,于是找到了一篇教程--Fred913大神的从头开始制作OJ-在线IDE的搭建 自己尝试动手做了一下, 还是发现不少细节需要注意, 记录在此 如果不 ...

随机推荐

  1. WEB端播放华为海康大华视频方案

    WEB端播放华为海康大华视频方案 类似标题:谷歌浏览器播放华为海康大华视频方案 方案 以下方案相当于给需要播放视频的WEB系统做了一个专用的浏览器,通过专用浏览器的CS客户端组件播放视频,当然,这个专 ...

  2. Java | Spring Boot数据源配置原理

    在数据库访问过程中,"数据源"无疑是最重要的概念之一,它不仅可以对与数据库访问相关的各种参数进行封装和统一管理,还可以管理数据库连接池,提高数据库连接性能. 目前,在市面上有很多优 ...

  3. #2028:Lowest Common Multiple Plus(n个数的最小公倍数)

    Problem Description 求n个数的最小公倍数. Input 输入包含多个测试实例,每个测试实例的开始是一个正整数n,然后是n个正整数. Output 为每组测试数据输出它们的最小公倍数 ...

  4. Codeforce:131A. cAPS lOCK

    原题链接 ╮(╯▽╰)╭这题题目一开始没看明白,导致wa几次.如果全是大写或者出了首字母是小写其他为大写,则转换为第一个字母大写,其他的小写 ,如果不是以上两种情况则不作处理. ╮(╯▽╰)╭水题还错 ...

  5. AtCoder Beginner Contest 176 (ABC水题,D题01BFS,E数组处理)

    补题链接:Here A - Takoyaki 很容易看出 \(\frac{N + X - 1}{X} \times T\) B - Multiple of 9 给定一个很大的整数,问其是否是 \(9\ ...

  6. iview+vue 加载进度条

    效果:浏览器最上方出现一个进度条. main.js import Vue from 'vue' import ViewUI from 'view-design'; import router from ...

  7. 你真的懂Linux内核中的阻塞和异步通知机制吗?

    @ 目录 阻塞/非阻塞简介 阻塞/非阻塞例程 等待队列简介 等待队列相关函数 定义等待队列 初始化等待队列头 定义并初始化一个等待队列项 将队列项添加到等待队列头 将队列项从等待队列头移除 等待唤醒 ...

  8. python常见面试题讲解(六)取近似值

    题目描述 写出一个程序,接受一个正浮点数值,输出该数值的近似整数值.如果小数点后数值大于等于5,向上取整:小于5,则向下取整. 输入描述: 输入一个正浮点数值 输出描述: 输出该数值的近似整数值 示例 ...

  9. mongodb 系统命令总结

    1.连接mongodb mongo ip/dbname -u username -p password #mongo -u admin -p admin 127.0.0.1:27017/pagedb ...

  10. Kubernerts - 概览

    1. Kubernerts K8s,是用于自动部署.扩容和管理容器化应用程序的开源系统 1.1 特性 自动化上线与回滚 分步骤针对应用或者配置更改上线,监控应用的运行状态同时不会终止所有实例,若出现问 ...