Je reçois une erreur lors de l'exécution d'un programme python:
Traceback (most recent call last):
File "C:\Program Files (x86)\Wing IDE 101 4.1\src\debug\tserver\_sandbox.py", line 110, in <module>
File "C:\Program Files (x86)\Wing IDE 101 4.1\src\debug\tserver\_sandbox.py", line 27, in __init__
File "C:\Program Files (x86)\Wing IDE 101 4.1\src\debug\tserver\class\inventory.py", line 17, in __init__
builtins.NameError: global name 'xrange' is not defined
Le jeu est de ici .
Qu'est-ce qui cause cette erreur?
Vous essayez d'exécuter une base de code Python 2 avec Python 3. xrange()
a été renommé en range()
dans Python 3.
Exécutez le jeu avec Python 2 à la place. N'essayez pas de le porter si vous ne savez pas ce que vous faites, il y aura probablement plus de problèmes au-delà de xrange()
par rapport à range()
.
Pour mémoire, ce que vous voyez n'est pas une erreur de syntaxe mais une exception d'exécution.
Si vous savez ce que vous faites et créez activement un code de base Python 2 compatible avec Python 3, vous pouvez créer un pont entre le code et ajouter le nom global à votre module comme alias pour range
. (Tenez compte du fait que vous pouvez mettre à jour toute utilisation de range()
existante dans la base de code Python 2 avec list(range(...))
pour vous assurer de continuer à obtenir un objet de liste dans Python 3):
try:
# Python 2
xrange
except NameError:
# Python 3, xrange is now named range
xrange = range
# Python 2 code that uses xrange(...) unchanged, and any
# range(...) replaced with list(range(...))
ou remplacez toutes les utilisations de xrange(...)
par range(...)
dans la base de code, puis utilisez un schéma différent pour rendre la syntaxe Python 3 compatible avec Python 2:
try:
# Python 2 forward compatibility
range = xrange
except NameError:
pass
# Python 2 code transformed from range(...) -> list(range(...)) and
# xrange(...) -> range(...).
Ce dernier est préférable pour les bases de code qui veulent être Python 3 compatibles uniquement à long terme, il est alors plus facile de utilisez simplement la syntaxe Python 3 chaque fois que cela est possible.
ajoutez xrange=range
dans votre code :) Cela fonctionne pour moi.
J'ai résolu le problème en ajoutant cette importation
Plus info
from past.builtins import xrange
dans python 2.x, xrange est utilisé pour renvoyer un générateur tandis que range est utilisé pour renvoyer une liste. Dans python 3.x, xrange a été supprimé et range renvoie un générateur identique à xrange dans python 2.x. Par conséquent, dans python 3.x, vous devez utiliser range plutôt que xrange.
Je suis d’accord avec la dernière réponse.Mais il existe un autre moyen de résoudre ce problème.Vous pouvez télécharger le package nommé future, tel que pip install future. Et dans votre fichier .py, saisissez cette entrée "from past.builtins import xrange". est pour la situation qu'il y a beaucoup de xranges dans votre fichier.
Remplacer
Python 2 xrange
to
Python 3 range
Reste tous pareil.