คำอธิบายข้อผิดพลาด: วัตถุ 'NoneType' ไม่สามารถทำซ้ำได้
ใน python2 NoneType เป็นประเภทของ None ใน Python3 NoneType เป็นคลาสของ None เช่น:
>>> print(type(None)) #Python2
<type 'NoneType'> #In Python2 the type of None is the 'NoneType' type.
>>> print(type(None)) #Python3
<class 'NoneType'> #In Python3, the type of None is the 'NoneType' class.
การวนซ้ำตัวแปรที่มีค่า None ล้มเหลว:
for a in None:
print("k") #TypeError: 'NoneType' object is not iterable
วิธี Python คืนค่า NoneType หากไม่คืนค่า:
def foo():
print("k")
a, b = foo() #TypeError: 'NoneType' object is not iterable
คุณต้องตรวจสอบโครงสร้างลูปของคุณสำหรับ NoneType ดังนี้:
a = None
print(a is None) #prints True
print(a is not None) #prints False
print(a == None) #prints True
print(a != None) #prints False
print(isinstance(a, object)) #prints True
print(isinstance(a, str)) #prints False
กุยโด้บอกว่าใช้is
เพื่อตรวจสอบเท่านั้นNone
เพราะis
มีประสิทธิภาพมากกว่าในการตรวจสอบตัวตน อย่าใช้การดำเนินการที่เท่าเทียมกันเพราะสิ่งเหล่านี้สามารถพ่นการดำเนินงานของตนเองได้ แนวทางสไตล์การเข้ารหัสของ Python - PEP-008
NoneType เป็นส่อเสียดและสามารถแอบเข้ามาจาก lambdas:
import sys
b = lambda x : sys.stdout.write("k")
for a in b(10):
pass #TypeError: 'NoneType' object is not iterable
NoneType ไม่ใช่คำหลักที่ถูกต้อง:
a = NoneType #NameError: name 'NoneType' is not defined
การต่อข้อมูลNone
และสตริง:
bar = "something"
foo = None
print foo + bar #TypeError: cannot concatenate 'str' and 'NoneType' objects
เกิดอะไรขึ้นที่นี่?
ล่ามของไพ ธ อนแปลงรหัสของคุณเป็น pyc bytecode เครื่องเสมือน Python ประมวลผล bytecode พบโครงสร้างลูปวนซึ่งกล่าวซ้ำมากกว่าตัวแปรที่มี None การดำเนินการถูกดำเนินการโดยเรียกใช้__iter__
เมธอดบนไม่มี
ไม่มีไม่มี__iter__
วิธีที่กำหนดไว้ดังนั้นเครื่องเสมือนของ Python จะบอกคุณถึงสิ่งที่เห็น: NoneType นั้นไม่มี__iter__
วิธีการ
นี่คือเหตุผลที่อุดมการณ์การพิมพ์เป็ดของงูใหญ่ถือว่าไม่ดี โปรแกรมเมอร์ทำสิ่งที่สมเหตุสมผลอย่างสมบูรณ์กับตัวแปรและเมื่อรันไทม์จะได้รับการปนเปื้อนโดยไม่มีเครื่องเสมือนงูหลามพยายามที่จะทหารบนและ pukes เรื่องไร้สาระที่ไม่เกี่ยวข้องทั่วพรม
Java หรือ C ++ ไม่มีปัญหาเหล่านี้เนื่องจากโปรแกรมดังกล่าวจะไม่ได้รับอนุญาตให้รวบรวมเนื่องจากคุณไม่ได้กำหนดสิ่งที่ต้องทำเมื่อไม่มีเกิดขึ้น Python ให้เชือกโปรแกรมเมอร์จำนวนมากเพื่อแขวนตัวเองโดยอนุญาตให้คุณทำสิ่งต่าง ๆ มากมายที่ไม่ควรคาดว่าจะทำงานภายใต้สถานการณ์พิเศษ Python เป็นคนใช่โดยบอกว่าใช่เมื่อคุณต้องการหยุดคุณจากการทำร้ายตัวเองเช่นเดียวกับ Java และ C ++
None
ถูกบังคับให้เป็นลำดับมันจะต้องสร้างลำดับที่ว่างเปล่าซึ่งไม่เป็นอันตรายโดยสิ้นเชิง