当前位置:  开发笔记 > 编程语言 > 正文

编写尽可能接近Python 3.x语法的Python 2.7代码

如何解决《编写尽可能接近Python3.x语法的Python2.7代码》经验,为你挑选了5个好方法。

由于Django还不支持Python 3.x,我使用的是Python 2.7.但是,我想继续并尽可能熟悉新的Python 3.x语法.这引出了我的问题:

编写与Python 3.x尽可能兼容的Python 2.7代码的最佳方法是什么?

我知道跑步python -3

警告2to3无法轻易解决的Python 3.x不兼容问题.

但是,我仍然对使用Python 2.7时习惯Python 3.x语法感兴趣.

例如,似乎我应该使用以下导入到我的代码:

from __future__ import print_function
from __future__ import unicode_literals
from __future__ import division
from __future__ import absolute_import

__future__ importPython 3.0开始,上述四个语句是必需的,但在Python 2.7.3的文档27.11中描述的2.7中不需要.未来声明定义

还有什么?



1> Eli Bendersk..:

现在许多模块都以允许在Python 2和Python 3上执行的方式进行重写.事实证明这并不是很难,并且将来很容易放弃Python 2支持.

看看有助于完成此任务的六个模块,以方便的方式封装了许多差异:

Six提供了简单的实用程序,用于包装Python 2和Python 3之间的差异.

它的网站(当然还有代码)列出了许多实现这一目标的方法.



2> Joschua..:

将下面的代码放到一个py3k.py模块并导入这样的: from py3k import *.你需要把它放在每个文件中,但如果没有人再使用Python 2.x你甚至可以把它放在那里,或者你可以用空格搜索并替换导入行然后删除文件.

try:
    from future_builtins import *
except ImportError:
    pass

try:
    input = raw_input
    range = xrange
except NameError:
    pass

这就是我的模板文件的外观:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""

"""

from __future__ import division, absolute_import, \
                       print_function, unicode_literals
from utils.py3k import *  # @UnusedWildImport


#



3> Lennart Rege..:

您还需要使用新的异常语法,即不再需要

try:
     raise Exception, "Message"
except Exception, e:
     pass

相反,你应该这样做:

try:
     raise Exception("Message")
except Exception as e:
     pass

还要确保在所有二进制字符串前加上ab,即:

这是一个二进制字符串'

有关此主题的更完整的介绍,请参阅http://python3porting.com/noconv.html


@Marcin:回到3.3.

4> orome..:

许多Python IDE在这里都有很大的帮助.

例如,PyCharm可以配置为检查与任何版本范围的兼容性,

在此输入图像描述

并报告任何严重程度的问题:

在此输入图像描述



5> Jakob Bowyer..:
try:
    input = raw_input
    range = xrange
except NameError:
    pass

有两个让人想起......

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有