Sie versuchen , eine Python 2 Code - Basis mit Python ausführen 3. xrange()
umbenannt wurde range()
3 in Python.
Führen Sie das Spiel stattdessen mit Python 2 aus. Versuchen Sie nicht , zu portieren , wenn Sie wissen , was Sie tun, wahrscheinlich wird es mehr Probleme über sein xrange()
vs. range()
.
Für den Datensatz wird kein Syntaxfehler angezeigt, sondern eine Laufzeitausnahme.
Wenn Sie wissen, was Sie tun, und eine Python 2-Codebasis aktiv mit Python 3 kompatibel machen, können Sie den Code überbrücken, indem Sie Ihrem Modul den globalen Namen als Alias für hinzufügen range
. (Berücksichtigen Sie, dass Sie möglicherweise eine vorhandene range()
Verwendung in der Python 2-Codebasis mit aktualisieren müssen, um list(range(...))
sicherzustellen, dass Sie in Python 3 weiterhin ein Listenobjekt erhalten.)
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(...))
oder ersetzen Sie alle Verwendungen von xrange(...)
durch range(...)
in der Codebasis und verwenden Sie dann einen anderen Shim, um die Python 3-Syntax mit Python 2 kompatibel zu machen:
try:
# Python 2 forward compatibility
range = xrange
except NameError:
pass
# Python 2 code transformed from range(...) -> list(range(...)) and
# xrange(...) -> range(...).
Letzteres ist für Codebasen vorzuziehen, die nur auf lange Sicht Python 3-kompatibel sein möchten. Es ist einfacher, wenn möglich nur die Python 3-Syntax zu verwenden.
füge
xrange=range
deinen Code hinzu :) Es funktioniert bei mir.quelle
Ich habe das Problem durch Hinzufügen dieses Imports gelöst.
Weitere Informationen
quelle
In Python 2.x wird xrange verwendet, um einen Generator zurückzugeben, während range verwendet wird, um eine Liste zurückzugeben. In Python 3.x wurde xrange entfernt und range gibt einen Generator zurück, genau wie xrange in Python 2.x. Daher müssen Sie in Python 3.x eher range als xrange verwenden.
quelle
Ersetzen
Python 2
xrange
bisPython 3
range
Ruhe dich trotzdem aus.
quelle
Ich stimme der letzten Antwort zu. Es gibt jedoch eine andere Möglichkeit, dieses Problem zu lösen. Sie können das Paket mit dem Namen future herunterladen, z. B. pip install future. Geben Sie in Ihre .py-Datei Folgendes ein: "from past.builtins import xrange". Diese Methode ist für die Situation, dass es viele xranges in Ihrer Datei gibt.
quelle
past.builtings.range
tut, wird einfachxrange
als Referenz gesetztrange
. Dies ist hilfreich beim Erstellen einer Python 2/3-Polyglot-Codebasis, jedoch nicht für ein vorhandenes Projekt geeignet, das nur für Python 2 entwickelt wurde.