ใน Python 3 ฟังก์ชัน xrange ถูกลบออก หากคุณพยายามใช้ฟังก์ชัน xrange ในโปรแกรม Python 3 คุณจะพบข้อผิดพลาด NameError: name 'xrange' is not defined
ในคู่มือนี้ เราจะอภิปรายว่าข้อผิดพลาดนี้หมายถึงอะไรและว่าทำไมคุณจึงอาจพบเจอ มาเจาะลึกตัวอย่างของข้อผิดพลาดนี้เพื่อให้คุณเรียนรู้วิธีแก้ไขในโค้ดของคุณ
NameError: name 'xrange' is not defined
ใน Python 2 ฟังก์ชัน xrange ให้คุณสร้างช่วงของตัวเลข พิจารณาตัวอย่างโค้ดต่อไปนี้:
print(xrange(0, 3))
โค้ดของเราคืนค่า [0, 1, 2] ซึ่งเป็นตัวเลขทั้งหมดในช่วง 0 ถึง 3 (ไม่นับ 3) ฟังก์ชัน xrange() คืนค่ารายการของตัวเลข
Python 3 ลบฟังก์ชัน xrange() ออก เพื่อใช้ฟังก์ชันใหม่ชื่อ range() แทน ฟังก์ชัน range() เหมือน xrange() ผลิตช่วงของตัวเลข
มีความแตกต่างสองประการระหว่าง xrange() และ range():
xrange()และrange()มีชื่อต่างกัน- ฟังก์ชัน
xrange()สร้างรายการของตัวเลข ฟังก์ชันrange()สร้างออบเจ็กต์
เนื่องจากฟังก์ชัน range() สร้างออบเจ็กต์ คุณจึงต้องแปลงมันเป็นรายการหากคุณต้องการดูรายการตัวเลข มิฉะนั้น สองเมธอดนี้ทำงานเหมือนกันทุกประการ
สถานการณ์ตัวอย่าง
เราจะเขียนโปรแกรมที่แสดงผู้เล่นคนแรกๆ ที่อยู่ที่อันดับบนของกระดานผู้นำเกมไพ่ เริ่มต้นด้วยการประกาศกระดานผู้นำเป็นรายการ:
leaderboard = ["Alex", "Jonas", "Emma", "Kate"]
ต่อไป เราจะถามผู้ใช้ว่าต้องการดูคะแนนกี่อันดับ:
to_view = int(input("How many scores would you like to view? "))
เราแปลงค่าที่ผู้ใช้ป้อนเป็นจำนวนเต็ม เนื่องจากฟังก์ชัน xrange() รองรับเฉพาะจำนวนเต็ม
ต่อไป มาวนซ้ำผ่านรายการกระดานผู้นำของเราโดยใช้ลูป for เราจะแสดงผลเฉพาะจำนวนผลลัพธ์ที่ผู้ใช้ขอดูบนคอนโซล:
for l in xrange(0, to_view):
print(l + 1, leaderboard[l])
เราใช้ฟังก์ชัน xrange() เพื่อสร้างช่วงตัวเลขระหว่าง 0 ถึงตัวเลขที่ผู้ใช้ป้อน ในลูป for ของเรา เราใช้คำสั่ง print() เพื่อพิมพ์รายการกระดานผู้นำที่สัมพันธ์กับตัวเลขในรายการ xrange() ที่ลูปของเรากำลังดู
เราพิมพ์ค่าของ "l" บวกหนึ่ง พร้อมกับชื่อผู้เล่น นี่ช่วยให้เราเห็นตำแหน่งของพวกเขา เนื่องจากรายการมีดัชนีเริ่มจากศูนย์ เราจึงบวกหนึ่งกับ "l" เพื่อป้องกันไม่ให้ผู้เล่นคนแรกในรายการของเราอยู่ที่ตำแหน่ง "0" และต่อไป
มาเรียกโค้ดของเราและดูสิ่งที่เกิดขึ้น:
How many scores would you like to view? 2 Traceback (most recent call last): File "main.py", line 5, infor l in xrange(0, to_view): NameError: name 'xrange' is not defined
โปรแกรมของเราคืนค่าข้อผิดพลาด
วิธีแก้ไข
เราได้ใช้ฟังก์ชัน xrange() เพื่อสร้างช่วงของตัวเลข ใน Python 2 นี่จะถูกต้อง แต่เรากำลังใช้ Python 3 เพื่อรันโปรแกรมของเรา ซึ่งหมายความว่าเราไม่สามารถอ้างอิงฟังก์ชัน xrange() ได้
เพื่อแก้ไขข้อผิดพลาดของเรา เราต้องแทนที่ xrange() ด้วยเมธอด range():
for l in range(0, to_view):
print(l + 1, leaderboard[l])
สำหรับกรณีการใช้งานนี้ ทั้ง xrange() และ range() จะคืนค่าผลลัพธ์เดียวกัน มาเรียกโค้ดของเราเพื่อดูว่าทำงานได้หรือไม่:
How many scores would you like to view? 2 1 Alex 2 Jonas
โปรแกรมของเราแสดงชื่อผู้เล่นในทัวร์นาเมนต์ที่ปรากฏในสองตำแหน่งแรกบนกระดานผู้นำสำเร็จ
การกำหนดค่าเมธอด xrange() ใหม่
วิธีแก้ไขที่เป็นไปได้สำหรับปัญหานี้คือการกำหนดตัวแปรชื่อ xrange ที่จุดเริ่มต้นของโปรแกรมของคุณที่เท่ากับฟังก์ชัน range():
xrange = range
นี่ไม่ใช่วิธีแก้ไขที่ดีสำหรับข้อผิดพลาดนี้ เนื่องจากคุณเพียงหลีกเลี่ยงปัญหาการเปลี่ยนชื่อเมธอดที่มีอยู่ มันจะสับสนสำหรับใครก็ตามที่อ่านโค้ดเบส Python 3 และเห็นคำสั่ง xrange() แม้คุณจะกำหนด xrange เป็นตัวแปร
วิธีแก้ไขที่ดีที่สุดคือการเปลี่ยนชื่อคำสั่ง xrange() ของคุณเป็น range() และทำการเปลี่ยนแปลงที่จำเป็นเพื่อให้โค้ดเบสของคุณทำงานใน Python 3
สรุป
ข้อผิดพลาด "NameError: name 'xrange' is not defined" จะถูกโยนออกมาเมื่อคุณพยายามใช้เมธอด xrange() เพื่อสร้างช่วงของตัวเลขใน Python 3 เพื่อแก้ไขข้อผิดพลาดนี้ ให้อัปเดตโค้ดของคุณให้ใช้เมธอด range() ที่มาพร้อมกับ Python 3
range() เป็นการแทนที่ของ Python 3 สำหรับ xrange() ตอนนี้คุณมีความรู้ที่จำเป็นในการแก้ไขข้อผิดพลาดนี้อย่างมืออาชีพแล้ว!