comment convertir Python 2 unicode() fonction en Python 3.x syntaxe

J'ai activé la vérification de la compatibilité dans mon IDE Python et maintenant je me rends compte que les hérité de Python 2.7 code a beaucoup d'appels à unicode() qui ne sont pas autorisés dans Python 3.x.

J'ai regardé la docs de Python2 et n'a trouvé aucune indication comment mettre à niveau:

Je ne veux pas passer à Python3 maintenant, mais peut-être dans l'avenir.

Le code contient environ 500 appels à unicode()

Comment procéder?

Mise à jour

Le commentaire de l'utilisateur vaultah lire la pyporting guide a reçu plusieurs upvotes.

Ma solution actuelle est cela (merci à Pierre-Bretagne):

from builtins import str

... Je ne pouvais pas trouver cette astuce dans le pyporting docs.....

  • docs.python.org/3/howto/pyporting.html
  • ce n'est pas une question d'ordre général. Il n'est que d'environ unicode() appels. J'ai le code de base qui je travaille actuellement sur, il y a environ 700 appels à cette méthode. Que dois-je faire?
  • Il n'y a pas de bonne réponse à cette question. Si vous êtes chanceux, vous pouvez simplement supprimer les appels à unicode et vous êtes bon pour aller. Toutes les chaînes de caractères unicode en Python 3. Si cela ne fonctionne pas, alors attendez-vous à beaucoup de travail. La transition de str en unicode littéraux et des octets est de loin le plus incompatible changement lors de la commutation de Python de 2 à 3.
  • Ne pourriez-vous définir votre propre unicode() fonction qui ne fait rien mais return str(arg) en Python 3?
  • vous pouvez affecter str à unicode - unicode = str (sans les parenthèses). Il devrait fonctionner.
  • réécrire ces appels ou de fournir votre propre unicode fonction de la remplacer. Vous aurez plus de problèmes avec la mise à niveau vers Python 3 cependant.
  • sauf que unicode() en Python 2 accepte str objets sans donner un codage explicite (décodage implicitement comme ASCII). En Python 3 en passant dans un bytes objet de lever une exception.
  • Dans quel but utilisez-vous unicode()? Veuillez fournir un exemple de votre code lorsque vous utilisez unicode().
  • oui, je pourrais faire 500 fois vérifier pourquoi il est utilisé. Mais d'abord je veux avoir un no-brainer comme solution. from builtins import str est un no-brainer, et plus tard, quelqu'un pourrait regarder à chaque utilisation dans le détail. Mais ce sera une autre question.
  • Vous l'avez déjà utilisé 500 fois!? C'est exactement pourquoi je pose la question. La bonne réponse n'est utile que si elle aborde le problème réel. Il semble que vous êtes en utilisant unicode() de manière incorrecte et peut être fixé avec une solution simple qui est sûr pour vos données, coffre-fort pour plusieurs langues et dans l'avenir. Vous devriez lire Comment Demander et un minimum de reproductibles exemple et lâche l'attitude
  • Oui, le code contient 500 fois. Mais ... c'est pas "mon code". C'est le code de la pose devant moi aujourd'hui.
  • qu'entendez-vous par "... et lâche l'attitude?"
  • Je voulais dire "perdre". J'ai essayé de l'aider mais ma demande (et les autres) pour obtenir une vision complète du problème afin de vous aider à mieux été accueilli avec un curt et de dédain. Encore une fois, une explication complète du problème, y compris le fait que vous avez hérité de la base de code peut donner de meilleures réponses que juste de répondre à la solution de Y.
  • oui, vous avez raison. Le code a été élaboré par une équipe de dix personnes. Je suis l'un d'entre eux. Ce n'est pas "mon" code. J'ai mis à jour la question.
  • Réponse courte: Ajouter unicode = str avant tout unicode appels
  • est-ce vraiment une bonne idée? semble que vous essayez de coder en dur un peu dur.
  • Oui, il est. Savez-vous à propos de la définition d'une fonction? Les fonctions sont comme des variables, et vous pouvez affecter cette fonction à une autre variable.

InformationsquelleAutor guettli | 2016-08-01