Écrire du code python 2.7 qui est aussi proche de Python 3.syntaxe x comme possible

puisque Django ne supporte pas encore Python 3.x, J'utilise Python 2.7. Cependant, j'aimerais commencer à me familiariser avec le nouveau Python 3.syntaxe x autant que possible. Ce qui m'amène à la question:

  • Quelle est la meilleure façon d'écrire du code python 2.7 qui sera aussi compatible que possible avec Python 3.x?

je sais que la course python -3 sera

Warn à propos de Python 3.x incompatibilités que 2à3 ne peut corriger par trivialement.

cependant, je suis intéressé à m'habituer à Python 3.syntaxe x tout en utilisant Python 2.7.

par exemple, il semble que je devrais utiliser les importations suivantes à mon code:

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

les quatre énoncés ci-dessus __future__ import sont requis à partir de Python 3.0, mais non requis en 2.7 comme décrit dans Python 2.7.3 documentation 27.11. Future Déclaration Définitions

quoi d'autre?

48
demandé sur Matthew Rankin 2011-05-09 17:03:08
la source

7 ответов

de nos jours, de nombreux modules sont réécrits d'une manière qui permet l'exécution à la fois sur Python 2 et Python 3. Cela ne s'avère pas très dur à tous, et dans l'avenir, il sera très facile de tomber juste Python 2.

regardez le module six qui vous aide dans cette tâche, en encapsulant de nombreuses différences d'une manière commode:

Six fournit des utilités simples pour emballage plus les différences entre les Python 2 et Python 3.

son site web (et bien sûr, son code) répertorie de nombreuses façons de rendre cela possible.

19
répondu Eli Bendersky 2011-05-09 17:12:39
la source

mettez le code suivant dans un module py3k.py et importez-le comme ceci: from py3k import * . Vous devez le mettre dans chaque fichier, mais vous pouvez même le laisser là si personne n'utilise Python 2.x Plus ou vous pouvez juste rechercher et remplacer la ligne d'importation avec des espaces et puis supprimer le fichier.

try:
    from future_builtins import *
except ImportError:
    pass

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

Et voici à quoi ressemble mon fichier de modèle:

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

"""

"""

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


#
10
répondu Joschua 2013-12-05 16:25:36
la source

vous devez également utiliser la nouvelle exception syntaxes, c'est-à-dire plus de

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

vous devriez plutôt faire:

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

assurez-vous également de préfixer toutes vos chaînes binaires avec un b, i.e.:

b Ce est une chaîne binaire'

pour une couverture plus complète de ce sujet, voir http://python3porting.com/noconv.html

8
répondu Lennart Regebro 2011-12-14 12:59:28
la source

beaucoup de Pythonides peuvent être d'une grande aide ici.

PyCharm , par exemple, peut être configuré pour vérifier la compatibilité avec n'importe quelle gamme de versions,

enter image description here

et signaler les problèmes à n'importe quel niveau de gravité:

enter image description here

8
répondu orome 2012-12-24 01:45:08
la source
try:
    input = raw_input
    range = xrange
except NameError:
    pass

sont deux qui viennent à l'esprit...

6
répondu Jakob Bowyer 2011-05-09 17:07:05
la source

je vous propose de donner un essai pour future library . De leur site:

python-future est la couche de compatibilité manquante entre Python 2 et Python 3. Il vous permet d'utiliser un seul, propre Python 3.codebase compatible x pour supporter à la fois Python 2 et Python 3 avec un minimum de frais généraux.

il fournit des paquets futurs et passés avec des rétroportages et des ports de transfert de fonctionnalités de Python 3 et 2. Il a également livré avec futurize et pasteurize, des scripts personnalisés basés sur 2to3 qui vous aident à convertir facilement le code Py2 ou Py3 pour prendre en charge les deux Python 2 et 3 dans une seule base de code propre de style Py3, module par module.

les projets notables qui utilisent Python-future pour la compatibilité Python 2/3 sont Mezzanine et ObsPy.

3
répondu rominf 2015-11-04 00:32:48
la source

Avoing range() et zip() , à l'aide de xrange() et itertools.izip() à la place.

1
répondu Ignacio Vazquez-Abrams 2011-05-09 17:06:47
la source

Autres questions sur