5031Fermer5033
flankerLe 27/08/2023 à 10:36
Uther (./5030) :
Je vois pas trop pourquoi les string / bytes posent problème, c'est bien deux types différents qui peuvent être traités différemment non ? Si j'ai bien compris, les chaines littérales sont par défaut des byte en Python 2 et des strings en Python 3. Si un programme Python 3 pouvait faire appel, dans un module traité en tant que Python 2, à une variable non spécifiée comme String, il recevrait un byte qu'il devrait convertir s'il veut pouvoir l'utiliser en tant que String, et vice versa.
Non, parce que tu as un comportement fondamentalement différent.
En Python2, la concaténation d'un string et d'un bytestring donne un string, ce qui fait beaucoup de développeurs ont mis des bytestring au lieu de string, comptant sur cette conversion magique pour obtenir des string quand c'était nécessaire.
En Python3, cette concaténation ne fonctionne volontairement pas.
Il n'y a aucun moyen de deviner automatiquement si le développeur voulait vraiment utiliser des bytestring ou s'il avait eu la flemme de taper le préfixe u.

D'une manière générale, il n'était pas possible de modifier Python3 pour le rendre compatible Python2, principalement à cause de ce vice de conception. Ils ont donc décidé de faire l'inverse : modifier Python2 pour le rendre compatible Python3, avec des modules de compatibilité pour que le même code fonctionne à la fois en Python2 et Python3.

Quant à la bibliothèque standard, comme je l'ai dit plus haut, les composants changés auraient certainement pu être dépréciés et remplacés par des nouveaux.
C'est rigolo, parce que tu râles sur la lenteur de la transition, et tu proposes plein de solutions pour qu'elle prenne encore plus de temps grin
Mais au final, tu n'as pas trente-six solutions possibles : soit tu acceptes de modifier ton code pour passer à Python 3 (et dans ce cas, il y avait vraiment tous les outils à ta disposition pour faire une transition franche ou progressive), soit tu ne veux pas toucher à ton code, et ça ne sert à rien de faire une version Python3 compatible Python2 (à part retarder l'échéance inéluctable de la perte de compatibilité).