1
fcicq 2016-06-29 21:11:49 +08:00 1
带你在 py3 下的报错信息再来
|
2
WinterWu 2016-06-29 21:27:42 +08:00 via iPhone
print 现在用 py3 写法也是兼容的。弄好编码格式,其它都是小问题,好改。再做好兼容性检查。看看开源同时支持怎么做的很容易搞清楚的。
|
3
shelltank 2016-06-29 21:38:02 +08:00
可以看看 six(2*3) : https://pypi.python.org/pypi/six
|
4
billlee 2016-06-29 21:53:19 +08:00 1
python 3 的异常语法在 python 2.7 里能用啊, except Exception as e:
新写的代码比较容易兼容,就是不要用 python 2 里被废弃的特性,然后用 __future__ 启用 backported 的新特性:文件头加上 # -*- coding: utf-8 -*- from __future__ import absolute_import, division, print_function, unicode_literals # unicode_literals 和 division 如果没用到也可以不加 if 'xrange' in dir(__builtins__): range = xrange 比较不好搞的是一些变化大的标准库,比如 ConfigParser (所以我现在都用 json 或 yaml 格式的配置)。 http://python-future.org 这个库也不错,不过比较简单的代码也没必要额外引入一个这个大的库 |
5
ksc010 2016-06-29 21:57:07 +08:00
1.看下 2 和 3 语法上的不同
2.尽量使用一些同时兼容 2 和 3 的第三方库(比如 http 相关的直接使用 requests ) 3. 通过 from __future__ import xxxx 使用一些 3 里面才有的功能 具体参考: https://docs.python.org/2/library/__future__.html |
6
eriale 2016-06-29 22:04:45 +08:00
pycharm 里可以代码兼容检查, Code Compatibility Inspection :
https://www.jetbrains.com/pycharm/whatsnew/ |
7
binux 2016-06-29 22:15:01 +08:00
我的一篇老文章: http://blog.binux.me/2014/12/porting-to-python-3/
不过,如果你所依赖的库不支持 python3 ,那还是算了吧。。。没意义 |
8
JerningChan 2016-06-30 00:27:10 +08:00
那樣的話,你保證好自己代碼的風格,然後以後要用到 py3 時,用 script,自動改就可以呀
|
9
strahe 2016-06-30 00:30:49 +08:00
用 3 的习惯来写 2,不要用 2 来兼容 3,我现在就是这样的,问题不大(python2.7 本身就是过度的).
|
10
tinyproxy 2016-06-30 00:38:26 +08:00
依赖的作者要升级到 py3 你不一定要用 py3 啊,如果有 bug 或者你需要新 feature , back port 回来不就好了。
而且一般不会就这么一个依赖吧,你自己写的代码要 2/3 通用好说,但你的依赖不一定是 2/3 通用的。 |
11
shyling 2016-06-30 00:42:15 +08:00
1 ,各种 future,例如 unicode_literals,print_function
2 ,深坑之 str/bytes/unicode ,书写时建议按 3 的规矩来 3 ,各种库( blackhole)的支持情况以及变化 总结:都运行运行改错咯 |
12
Arnie97 2016-06-30 02:36:35 +08:00 via Android
|
13
Neveroldmilk 2016-06-30 08:21:36 +08:00
一般做不到跨版本兼容,但是 py 内置的函数按照 py3 的格式写应该也是能在 py2 上运行的。
|
14
ToughGuy 2016-06-30 08:49:30 +08:00
pycharm 带有 python3 兼容性检查, 不兼容的地方会提示
|
15
pynix 2016-06-30 09:42:03 +08:00
直接用 3 写,跑在 2 下面出问题在做兼容方案。。。
|
16
lovepython 2016-06-30 11:22:36 +08:00
写完以后有一个 2to3 程序,转换下
|
17
glasslion 2016-06-30 14:41:03 +08:00
首先不要把同时兼容 Python2 和 Python3 想得多难,现在大多数的第三库都能做到同时兼容的。
如果你的项目不开源,只是内部使用的话,只支持一个 Python 版本也未尝不可。先用 Python2 开发, 要迁到 Python3 时, 用 2to3 转换一下就行了, 这样比同时支持 Python2/3 工作量小一些。 你得知道 Python2 和 Python3 的语法有什么不同, 有什么办法去解决这些这些不同。 [Supporting Python 3: An in-depth guide]( http://python3porting.com/) 这本书总结的很全面,而且开源,可以看看 选择第三方库时, 注意看它是否支持 Python3 。 Python3 标准库一般也有相应的 backport 的。 用 Jenkins , Travis CI , tox 之类的工具跑 Python2 + Python3 的 unit test |
18
glasslion 2016-06-30 14:42:14 +08:00
@billlee configparser 有 Python2 的 backport https://pypi.python.org/pypi/configparser
|
20
lowzoom 2016-06-30 21:05:51 +08:00
用 from __future__ 可以解决大部分基本语法差异,但是不建议导入 unicode_literals ,因为在用 r 前缀字符串表示路径的时候, unicode_literals 会把\u 和后面连带的字符解析成 unicode 码字面值,满烦人的
而且手动加 u ,可以让你在写代码的时候,脑里会有 str 跟 unicode 的概念,这在 windows 下正确处理外部传进来的参数时还是很重要的 |