Python Academy · บทเรียน

ทำความเข้าใจข้อยกเว้น

เรียนรู้ว่าข้อยกเว้นคืออะไรและ Python ยกข้อยกเว้นอย่างไร

บทเรียน 1 จาก 414 ขั้นตอน

ทำความเข้าใจข้อยกเว้น เป็นบทเรียน Python Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Python Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน

บทนำ

ข้อยกเว้นคือกลไกของ Python สำหรับส่งสัญญาณและจัดการข้อผิดพลาดขณะโปรแกรมทำงาน

ข้อยกเว้นคืออะไร

ข้อยกเว้นคือเหตุการณ์ที่รบกวนลำดับการทำงานปกติของโปรแกรม Python จะส่งข้อยกเว้นเมื่อเกิดข้อผิดพลาด เช่น การหารด้วยศูนย์
# 1 / 0  # raises ZeroDivisionError
print('exceptions demo')

ลำดับชั้นของข้อยกเว้น

ข้อยกเว้นทั้งหมดสืบทอดจาก BaseException ส่วนข้อยกเว้นที่ผู้ใช้พบโดยทั่วไปจะสืบทอดจาก Exception ประเภทเฉพาะ ได้แก่ ValueError, TypeError, KeyError และอื่น ๆ
print(issubclass(ValueError, Exception))
print(issubclass(Exception, BaseException))

ข้อยกเว้นในตัวที่พบบ่อย

TypeError: ประเภทไม่ถูกต้อง ValueError: ประเภทถูกต้องแต่ค่าไม่ถูกต้อง KeyError: ไม่มีคีย์ของ dict IndexError: ดัชนีของ list อยู่นอกช่วง และ AttributeError: ไม่มีแอตทริบิวต์ดังกล่าว
# Examples:
# int('abc')       -> ValueError
# d['missing']     -> KeyError
# [1,2][9]         -> IndexError
print('common exceptions')

แทรซแบ็ก

เมื่อข้อยกเว้นไม่ได้รับการจัดการ Python จะแสดงแทรซแบ็ก ซึ่งเป็นสแตกการเรียกจากด้านล่าง (ล่าสุด) ไปด้านบน ควรฝึกอ่านข้อมูลนี้ให้เป็น
def f(): return 1/0
# f()  # shows traceback
print('traceback demo')

ออบเจ็กต์ข้อยกเว้น

ข้อยกเว้นแต่ละรายการจะมีข้อความกำกับ str(e) หรือ e.args ให้คำอธิบาย และสามารถเข้าถึงภายใน except ได้ดังนี้: except ValueError as e
try:
    int('abc')
except ValueError as e:
    print(type(e).__name__, e)

การดักจับหลายประเภท

except (TypeError, ValueError): ดักจับข้อยกเว้นประเภทใดประเภทหนึ่งจากสองประเภทภายในส่วนคำสั่งเดียว
def parse(x):
    try:
        return int(x)
    except (TypeError, ValueError):
        return None
print(parse('abc'), parse(None))

กลุ่มข้อยกเว้น (3.11 ขึ้นไป)

Python 3.11 เพิ่ม ExceptionGroup สำหรับข้อยกเว้นหลายรายการที่เกิดขึ้นพร้อมกัน โดยจัดการด้วยไวยากรณ์ except*
# Python 3.11+:
# try: ...
# except* ValueError as eg:
#     print(eg.exceptions)
print('exception group demo')

คำเตือนกับข้อยกเว้น

import warnings; warnings.warn('msg') ออกคำเตือนโดยไม่ส่งข้อยกเว้น ใช้สำหรับการเลิกใช้งานและข้อผิดพลาดแบบไม่รุนแรง
import warnings
warnings.warn('This is deprecated', DeprecationWarning)
print('warning issued')

sys.exc_info()

ภายในบล็อก except, sys.exc_info() จะคืนค่า (type, value, traceback) ซึ่งมีประโยชน์สำหรับการบันทึกรายละเอียดข้อยกเว้นทั้งหมด
import sys
try:
    1/0
except:
    exc_type, exc_val, _ = sys.exc_info()
    print(exc_type, exc_val)

การเชื่อมโยงข้อยกเว้น

raise NewError('msg') from original เชื่อมโยงข้อยกเว้นเข้าด้วยกัน โดยแอตทริบิวต์ __cause__ จะเชื่อมโยงข้อยกเว้นเหล่านั้น
try:
    int('abc')
except ValueError as e:
    raise RuntimeError('parse failed') from e

ตรวจสอบความเข้าใจ

ข้อยกเว้นใดจะถูกส่งขึ้นมาเมื่อเข้าถึง dict ด้วยคีย์ที่ไม่มีอยู่?

สรุป

ข้อยกเว้นสืบทอดจาก BaseException ให้อ่านแทรซแบ็กจากล่างขึ้นบน ดักจับด้วย except as e ประเภทที่พบบ่อยคือ ValueError, TypeError, KeyError, IndexError และ AttributeError

ไปต่อ

ทำได้ดีมาก! ไปยังบทเรียนถัดไปเพื่อพัฒนาทักษะต่อไป
เริ่มต้นได้ฟรี

เรียนรู้ Python ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
76
บทเรียน
320

คำถามที่พบบ่อย

บทเรียน “ทำความเข้าใจข้อยกเว้น” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ทำความเข้าใจข้อยกเว้น” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Python Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ทำความเข้าใจข้อยกเว้น”

เรียนรู้ว่าข้อยกเว้นคืออะไรและ Python ยกข้อยกเว้นอย่างไร คุณปฏิบัติ Python Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Python Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Python Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “ทำความเข้าใจข้อยกเว้น” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Python Academy นี้ได้ไหม

ได้ บทเรียน Python Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ทำความเข้าใจข้อยกเว้น
  2. try / except / else / finally
  3. การยกและยกข้อยกเว้นซ้ำ
  4. คลาสข้อยกเว้นแบบกำหนดเอง
← กลับไปที่ Python Academy