คุณกำลังพยายามรันฐานข้อมูล Python 2 ด้วย Python 3 xrange()
ถูกเปลี่ยนชื่อเป็นrange()
ใน Python 3
รันเกมด้วย Python 2 แทน อย่าพยายามที่จะพอร์ตจนกว่าคุณจะรู้ว่าคุณกำลังทำส่วนใหญ่จะมีปัญหามากขึ้นเกินกว่าเมื่อเทียบกับxrange()
range()
สำหรับบันทึกสิ่งที่คุณเห็นไม่ใช่ข้อผิดพลาดทางไวยากรณ์ แต่เป็นข้อยกเว้นแบบรันไทม์แทน
หากคุณไม่ทราบว่าสิ่งที่คุณกำลังทำและมีความกระตือรือร้นในการทำหลาม 2 codebase เข้ากันได้กับงูหลาม 3 range
คุณสามารถสะพานรหัสโดยการเพิ่มชื่อระดับโลกเพื่อโมดูลของคุณเป็นชื่อแทนสำหรับ (คำนึงถึงว่าคุณอาจต้องปรับปรุงการrange()
ใช้งานใด ๆ ที่มีอยู่ในฐานข้อมูล Python 2 ด้วยlist(range(...))
เพื่อให้แน่ใจว่าคุณยังคงได้รับวัตถุรายการใน 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(...))
หรือแทนที่การใช้ทั้งหมดของxrange(...)
ด้วยrange(...)
ใน codebase แล้วใช้ shim ที่แตกต่างกันเพื่อให้ไวยากรณ์ Python 3 เข้ากันได้กับ Python 2:
try:
# Python 2 forward compatibility
range = xrange
except NameError:
pass
# Python 2 code transformed from range(...) -> list(range(...)) and
# xrange(...) -> range(...).
หลังเป็นที่นิยมสำหรับ codebases ที่ต้องการที่จะมุ่งมั่นที่จะหลาม 3 เข้ากันได้เพียง แต่ในระยะยาวก็จะง่ายต่อการจากนั้นเพียงแค่ใช้งูหลาม 3 ไวยากรณ์เมื่อใดก็ตามที่เป็นไปได้