1. บทนำ
เมื่อเขียนโปรแกรมด้วย Python, “การตรวจสอบค่า null” เป็นสิ่งสำคัญสำหรับการยืนยันว่าข้อมูลไม่มีอยู่หรือเพื่อจัดการข้อผิดพลาด ใน Python มีค่าพิเศษที่สอดคล้องกับ “null” ในภาษาอื่นคือ None ซึ่งถูกจัดเตรียมไว้และใช้ในหลายสถานการณ์
บทความนี้อธิบายวิธีทำ “การตรวจสอบค่า null” และวิธีใช้ให้มีประสิทธิภาพจากมุมมองของ Python เขียนให้เข้าใจง่ายสำหรับผู้เริ่มต้นและมุ่งเน้นให้เนื้อหานี้นำไปใช้ได้จริงในการพัฒนา ดังนั้นกรุณาใช้เป็นเอกสารอ้างอิง
2. “null” คืออะไรใน Python?
ภาษาการเขียนโปรแกรมมีค่าพิเศษที่แทนการไม่มีข้อมูลหรือสถานะที่ไม่ถูกต้อง ตัวอย่างเช่น JavaScript และ Java ใช้ “null”, PHP ใช้ “NULL”, แต่ใน Python ค่าดังกล่าวเรียกว่า “None”
แนวคิดพื้นฐานของ None ใน Python
None ของ Python สอดคล้องกับ “null” ในภาษาอื่นและบ่งบอกว่าข้อมูลไม่มีหรือยังไม่ได้ตั้งค่าโดยเจตนา ใน Python ข้อมูลทั้งหมดถือเป็นอ็อบเจกต์และ None ก็ไม่ใช่ข้อยกเว้น — มันเป็นอ็อบเจกต์ของชนิดพิเศษ NoneType ตัวอย่างเช่น การกำหนดค่า None ให้กับตัวแปรตามด้านล่าง จะบ่งบอกว่าไม่มีข้อมูลใดถูกตั้งค่า
x = None
ทำให้ชัดเจนว่าตัวแปร x ไม่มีค่าที่ตั้งไว้ 
3. การใช้ None เบื้องต้น
ใน Python, None ถูกใช้ในหลายสถานการณ์เพื่อบ่งบอกสถานะเฉพาะอย่างอย่างชัดเจน ที่นี่เราจะนำเสนอการใช้ None เบื้องต้น
การกำหนด None ให้กับตัวแปร
การกำหนด None ให้กับตัวแปรหมายความว่ามัน “ไม่มีค่า” หรือ “ยังไม่ได้ตั้งค่า” ใช้สำหรับข้อมูลที่ยังไม่ได้ตัดสินใจหรือสำหรับตัวแปรที่ต้องการปล่อยให้ว่างชั่วคราว
name = None
age = None
ฟังก์ชันที่คืนค่า None
เมื่อค่าที่คืนกลับไม่จำเป็นต้องใช้ในฟังก์ชัน หรือคุณต้องการบ่งบอก “คืนค่าไม่มีอะไร” ภายใต้เงื่อนไขบางอย่าง มักจะคืนค่า None ตัวอย่างเช่น ฟังก์ชันด้านล่างสามารถคืนค่า None เมื่อเงื่อนไขไม่เป็นจริง
def find_even_number(numbers):
for num in numbers:
if num % 2 == 0:
return num
return None
ฟังก์ชันนี้ค้นหาและคืนค่าตัวเลขคู่ แต่หากไม่พบใด ๆ จะคืนค่า None เพื่อบ่งบอกว่าไม่มีข้อมูลที่ตรงกัน
4. วิธีตรวจสอบ None
ใน Python วิธีทั่วไปในการตรวจสอบว่าตัวแปรเป็น None คือการใช้ตัวดำเนินการ is โดยเฉพาะ ตัวดำเนินการ is มีความน่าเชื่อถือสูงสำหรับการทดสอบ None และได้รับคำแนะนำจากแนวทางการเขียนโค้ดของ Python อย่างเป็นทางการ (PEP 8) ตัวดำเนินการ == ก็สามารถใช้ได้เช่นกัน แต่เนื่องจากพฤติกรรมที่แตกต่างกันจึงต้องระมัดระวัง ส่วนนี้จะอธิบายวิธีแต่ละแบบ
วิธีตรวจสอบด้วยตัวดำเนินการ is
ตัวดำเนินการ is เป็นวิธีมาตรฐานใน Python เพื่อตรวจสอบว่าตัวแปรเป็น None หรือไม่ is ตรวจสอบอัตลักษณ์ของอ็อบเจกต์ จึงเหมาะสำหรับการกำหนดค่า None มาดูตัวอย่างต่อไป
x = None
if x is None:
print("x is None")
ในโค้ดนี้ หากตัวแปร x เป็น None จะพิมพ์ว่า “x is None” การใช้ตัวดำเนินการ is ทำให้โค้ดอ่านง่ายและชัดเจน จึงแนะนำให้ใช้ is สำหรับการทดสอบ None โดยเฉพาะ
ความแตกต่างและข้อควรระวังเมื่อใช้ตัวดำเนินการ ==
ใน Python คุณก็สามารถใช้ตัวดำเนินการ == เพื่อตรวจสอบ None ได้เช่นกัน แต่ == มีจุดประสงค์เพื่อเปรียบเทียบ “ความเท่ากันของค่า” มันก็ทำงานได้กับ None แต่บางครั้งอาจให้ผลลัพธ์ที่ไม่คาดคิด ดังนั้นจึงควรใช้ is เมื่อทดสอบ None
x = None
if x == None: # Works, but not recommended
print("x is None")
การตรวจสอบกรณีลบ (is not)
หากต้องการยืนยันว่าตัวแปรไม่เป็น None ให้ใช้ตัวดำเนินการ is not is not มีประโยชน์สำหรับระบุว่าจะทำอะไรเมื่อ ตัวแปรไม่เป็น None
x = 5
if x is not None:
print("x is not None")
ในตัวอย่างนี้ หาก x ไม่เป็น None จะพิมพ์ว่า “x is not None” การใช้ตัวดำเนินการ is not แบบนี้ทำให้สามารถทดสอบเงื่อนไขที่ตัวแปรไม่เป็น None ได้อย่างชัดเจน
5. ความแตกต่างระหว่าง None กับค่าที่เป็น falsy อื่น ๆ
ใน Python มีค่าหลายค่า นอกจาก None ที่ถูกประเมินเป็น “falsy” เช่น สตริงว่าง '' ค่าเชิงตัวเลข 0 รายการว่าง [] เป็นต้น อย่างไรก็ตาม ค่าต่าง ๆ เหล่านี้แตกต่างจาก None เราจะทำความเข้าใจความแตกต่างระหว่าง None กับค่าที่เป็น falsy อื่น ๆ อย่างลึกซึ้ง
ภาพรวมของ None และค่าที่เป็น falsy อื่น ๆ
ค่าหลักที่ประเมินเป็น falsy ใน Python มีดังนี้
None- สตริงว่าง
'' - ตัวเลข
0 - รายการว่าง
[] - พจนานุกรมว่าง
{}
ค่าทั้งหมดนี้ประเมินเป็น False แต่ None แตกต่างจากพวกมันตรงที่เป็นการแสดงถึงการไม่มีค่า
ความแตกต่างระหว่าง None กับสตริงว่าง ''
สตริงว่าง '' บ่งบอกว่าข้อมูลว่างเปล่า แต่ยังคงชนิดข้อมูลเป็น str อยู่ ในขณะที่ None เป็นอ็อบเจ็กต์พิเศษที่ไม่มีชนิดข้อมูล มาดูตัวอย่างต่อไป
text = ''
if text is None:
print("text is None")
elif text == '':
print("text is an empty string")
โค้ดนี้แยกแยะว่า text เป็นสตริงว่างหรือ None และจัดการแต่ละกรณีตามที่เหมาะสม
ความแตกต่างจากตัวเลข 0 และรายการว่าง []
ตัวเลข 0 และรายการว่าง [] ก็ประเมินเป็น False เช่นกัน แต่ค่าต่าง ๆ เหล่านี้บ่งบอกว่ามีค่าเชิงตัวเลขหรือรายการที่เนื้อหาว่างเปล่า None ซึ่งไม่มีชนิดข้อมูล หมายถึงไม่มีการตั้งค่าอะไรเลย มายืนยันด้วยตัวอย่างต่อไป
data = 0
if data is None:
print("data is None")
elif data == 0:
print("data is 0")
การเข้าใจความแตกต่างระหว่าง None กับค่าที่เป็น falsy อื่น ๆ จะทำให้การตรวจสอบค่าถูกต้องมากขึ้น
6. ตัวอย่างการใช้งาน None อย่างเป็นรูปธรรม
ในส่วนนี้เราจะอธิบายตัวอย่างการใช้ None อย่างมีประสิทธิภาพในโปรแกรม Python None ถูกใช้กันอย่างแพร่หลายสำหรับอาร์กิวเมนต์เริ่มต้น, การจัดการข้อมูลที่ดึงมาจากฐานข้อมูล, การจัดการข้อผิดพลาด, และอื่น ๆ การเข้าใจตัวอย่างการใช้งานเหล่านี้ช่วยเพิ่มความสามารถในการบำรุงรักษาและอ่านโค้ดได้ง่ายขึ้น
ใช้ None เป็นค่าเริ่มต้นของฟังก์ชัน
การตั้งค่า None เป็นค่าเริ่มต้นของอาร์กิวเมนต์ฟังก์ชันทำให้การออกแบบฟังก์ชันมีความยืดหยุ่น ตัวอย่างเช่น หากอาร์กิวเมนต์ไม่ได้ถูกส่งเข้าไปในฟังก์ชัน คุณสามารถใช้ None เพื่อตรวจสอบและกำหนดพฤติกรรมเริ่มต้นตามเงื่อนไข
def greet(name=None):
if name is None:
print("Hello, Guest!")
else:
print(f"Hello, {name}!")
ฟังก์ชัน greet นี้จะแสดง “Hello, Guest!” เมื่ออาร์กิวเมนต์ name ไม่ได้ถูกระบุ และเมื่อมีการระบุจะทักทายด้วยชื่อที่กำหนด การใช้ None แบบนี้ทำให้สร้างฟังก์ชันที่มีพฤติกรรมยืดหยุ่นได้ง่าย
จัดการ None เมื่อดึงข้อมูลจากฐานข้อมูล
เมื่อดึงข้อมูลจากฐานข้อมูล None อาจถูกคืนค่าเมื่อข้อมูลไม่มีอยู่ ตัวอย่างเช่น ค่าที่เป็น NULL ของ SQL มักถูกแปลงเป็น None โดยตรง และคุณจะทำการตรวจสอบ None เพื่อกำหนดว่าข้อมูลหายไปหรือไม่
user_data = get_user_data(user_id) # Function to retrieve user data
if user_data is None:
print("No user data found")
else:
print("Displaying user data")
ในที่นี้ หากฟังก์ชัน get_user_data ไม่ได้คืนค่าข้อมูลผู้ใช้ จะคืนค่า None และจะแสดงข้อความ “No user data found” การตรวจสอบ None แบบนี้ทำให้การทำงานกับฐานข้อมูลปลอดภัยและเชื่อถือได้มากขึ้น
ใช้ None ในการจัดการข้อผิดพลาด
None ยังถูกใช้เป็นส่วนหนึ่งของการจัดการข้อผิดพลาด โดยเฉพาะในสถานการณ์ที่ต้องตรวจสอบหรือจัดการข้อยกเว้น การตรวจสอบว่าผลลัพธ์เป็น None ทำให้การตรวจจับข้อผิดพลาดทำได้ง่าย
def divide(a, b):
if b == 0:
return None
return a / b
result = divide(10, 0)
if result is None:
print("Error: Division by zero occurred")
else:
print(f"Result: {result}")
ในตัวอย่างนี้ ฟังก์ชัน divide ตรวจสอบการหารด้วยศูนย์และคืนค่า None หากเกิดข้อผิดพลาด ซึ่งทำให้ผู้เรียกสามารถตรวจสอบ None และแสดงข้อความแสดงข้อผิดพลาดที่เหมาะสมได้ 
7. แนวปฏิบัติที่ดีที่สุดสำหรับการตรวจสอบ None
เมื่อทำการตรวจสอบ None ใน Python การใช้วิธีที่เหมาะสมสามารถเพิ่มความอ่านง่ายและความน่าเชื่อถือของโค้ดได้ ด้านล่างนี้คือแนวปฏิบัติที่ดีที่สุดสำหรับการตรวจสอบ None
วิธีที่แนะนำสำหรับการตรวจสอบ None ตาม PEP 8
PEP 8 ซึ่งเป็นคู่มือสไตล์อย่างเป็นทางการของ Python แนะนำให้ใช้ตัวดำเนินการ is เพื่อตรวจสอบ None วิธีนี้ทำให้การบ่งบอกอัตลักษณ์ของอ็อบเจกต์ชัดเจนและแยก None ออกจากค่า “falsy” อื่น ๆ
value = None
if value is None:
print("value is None")
การใช้ is เพื่อตรวจสอบ None ช่วยให้โค้ดอ่านง่ายขึ้นและทำให้เจตนาชัดเจน ซึ่งช่วยป้องกันบั๊กได้
ตัวอย่างโค้ดเพื่อปรับปรุงความอ่านง่ายและการบำรุงรักษา
เพื่อความอ่านง่ายและการบำรุงรักษา ควรตรวจสอบ None ด้วยโค้ดที่เรียบง่ายและง่าย นอกจากนี้ เมื่อคาดว่าจะได้ค่า None การเพิ่มคอมเมนต์เพื่ออธิบายวัตถุประสงค์และเจตนาของ None ก็เป็นประโยชน์
# When no value is set, None is expected
data = fetch_data()
if data is None:
print("Could not retrieve data")
ด้วยวิธีนี้ การอธิบายความหมายของ None ด้วยคอมเมนต์ทำให้การบำรุงรักษาโค้ดในอนาคตง่ายขึ้น




