Python:
การจัดการกับข้อผิดพลาด
วิธีการ:
# บล็อก try-except พื้นฐาน
try:
# โค้ดที่มีความเสี่ยง
number = int(input("ใส่ตัวเลข: "))
except ValueError:
# จัดการข้อผิดพลาด
print("นั่นไม่ใช่ตัวเลข!")
# ระบุข้อยกเว้นหลายรายการ
try:
# โค้ดที่อาจทำให้เกิดข้อยกเว้นต่างๆ
result = 10 / int(input("ใส่ตัวหาร: "))
except ZeroDivisionError:
print("อุ๊ย! ไม่สามารถหารด้วยศูนย์ได้.")
except ValueError:
print("ฉันต้องการตัวเลข, เพื่อน.")
# การใช้ else และ finally
try:
number = int(input("ใส่ตัวเลขเพื่อยกกำลังสอง: "))
except ValueError:
print("ฉันบอกว่าตัวเลขนะ!")
else:
# ไม่มีข้อผิดพลาดเกิดขึ้น
print("ตัวเลขของคุณยกกำลังสองคือ:", number**2)
finally:
# ทำงานเสมอ
print("ขอบคุณที่ลองใช้งานนี้!")
ตัวอย่างผลลัพธ์เมื่อป้อนตัวเลขที่ไม่ถูกต้องสำหรับบล็อกแรก:
ใส่ตัวเลข: สวัสดี
นั่นไม่ใช่ตัวเลข!
ศึกษาลึกลงไป
ตั้งแต่ยุคแรกของการเขียนโปรแกรม, การจัดการข้อผิดพลาดถือเป็นสิ่งสำคัญ วิธีการเริ่มต้นนั้นเป็นพื้นฐานเช่นการตรวจสอบเงื่อนไขก่อนดำเนินการที่มีความเสี่ยงทุกครั้ง ไวยากรณ์ try-except
ของ Python มีมรดกมาจากการจัดการข้อยกเว้นในภาษาเก่าๆ เช่น C++ และ Java, ทำให้กระบวนการนี้ง่ายขึ้น
เมื่อคุณ try
บล็อกของโค้ด, Python จะสังเกตการณ์สำหรับข้อยกเว้นใดๆ หากมีข้อผิดพลาดปรากฏขึ้น, บล็อก except
จะจับมัน คุณสามารถระบุข้อยกเว้นที่คุณจับได้อย่างเฉพาะเจาะจงหรือจับพวกมันทั้งหมดด้วย except
ว่างๆ อย่างไรก็ตาม, การเริ่มต้นด้วยข้อยกเว้นเฉพาะเจาะจงนั้นเป็นวิธีที่ดีกว่า - มันแม่นยำ, ไม่ใช่เครือข่ายจับทั้งหมด
else
และ finally
เป็นส่วนเสริมในแนวคิดนี้ บล็อก else
จะทำงานหากบล็อก try ไม่มีข้อผิดพลาด finally
เป็นเพื่อนที่เชื่อถือได้ที่จะทำงานไม่ว่าจะเกิดอะไรขึ้น - คิดถึงการดำเนินการทำความสะอาด
มีทางเลือกอื่นหรือไม่? แน่นอนว่ามี บางภาษาใช้รหัสการส่งคืนแทนการขัดข้อง คุณอาจพบกับคำสั่ง with
สำหรับการจัดการทรัพยากรหรือ assertions
ที่ตรวจสอบเงื่อนไขขณะพัฒนา แต่เมื่อเราพูดถึงกลยุทธ์การจัดการข้อผิดพลาดที่มั่นคง, โมเดล try-catch โดดเด่นด้วยความสามารถในการอ่านและโครงสร้าง
ดูเพิ่มเติม
นี่คือทรัพยากรเพิ่มเติมที่ดีสำหรับการศึกษาลึกลงไป:
- เอกสารเกี่ยวกับข้อผิดพลาดและข้อยกเว้นอย่างเป็นทางการของ Python: Python Docs – Errors and Exceptions
- คู่มือจาก Real Python เกี่ยวกับเรื่องนี้: Real Python - บล็อก try/except/else/finally
- การอภิปรายที่มีความคิดที่ดีเกี่ยวกับปฏิบัติการจัดการข้อผิดพลาด: Stack Overflow – ฉันจะละเว้นข้อยกเว้นอย่างเหมาะสมได้อย่างไร?