0Pricing
Python Academy · บทเรียน

try / except / else / finally

จัดโครงสร้างบล็อกจัดการข้อยกเว้นสำหรับทุกสถานการณ์

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

บทนำ

try/except/else/finally ของ Python ช่วยให้คุณควบคุมการจัดการข้อผิดพลาดและการล้างทรัพยากรได้อย่างครบถ้วน

try/except พื้นฐาน

try: risky_code() except ExceptionType: handle() — Python จะประมวลผลบล็อก except เฉพาะเมื่อมีการส่งข้อยกเว้นประเภทนั้นขึ้นมา
try:
    x = int('abc')
except ValueError:
    print('not a number')

การดักจับออบเจ็กต์ข้อยกเว้น

except ValueError as e: ผูกข้อยกเว้นเข้ากับ e ใช้ str(e) หรือ e.args เพื่อรับข้อความ
try:
    int('oops')
except ValueError as e:
    print(f'Error: {e}')

การดักจับหลายข้อยกเว้น

except (TypeError, ValueError) as e: ดักจับข้อยกเว้นประเภทใดประเภทหนึ่งจากสองประเภท
for val in ['abc', None, 42]:
    try:
        print(int(val))
    except (TypeError, ValueError) as e:
        print(f'skipping {val!r}: {e}')

except เปล่า (ควรหลีกเลี่ยง)

except: (ไม่มีการระบุประเภท) ดักจับ EVERYTHING รวมถึง KeyboardInterrupt และ SystemExit เกือบจะเป็นความผิดพลาดเสมอ — ควรระบุประเภททุกครั้ง
try:
    risky = 1/0
except ZeroDivisionError:
    print('division error')  # specific

ส่วนคำสั่ง except หลายส่วน

คุณสามารถมีบล็อก except หลายบล็อก โดยแต่ละบล็อกจัดการข้อยกเว้นคนละประเภท Python จะลองใช้บล็อกเหล่านี้ตามลำดับ
def process(val):
    try:
        return 10 / int(val)
    except ValueError:
        print('not a number')
    except ZeroDivisionError:
        print('division by zero')
process('abc')
process('0')

ส่วนคำสั่ง else

try/except/else: else จะทำงานเมื่อไม่มีข้อยกเว้นถูกส่งขึ้นมาเท่านั้น ใช้สำหรับโค้ดที่ควรทำงานเมื่อสำเร็จ
try:
    x = int('42')
except ValueError:
    print('bad input')
else:
    print('parsed:', x)

ส่วนคำสั่ง finally

finally: ทำงาน ALWAYS — หลัง try สำเร็จ หลัง except และแม้จะมี return หรือ break เหมาะอย่างยิ่งสำหรับการล้างทรัพยากร
def read_file(path):
    f = None
    try:
        f = open(path)
        return f.read()
    except FileNotFoundError:
        return None
    finally:
        if f: f.close()
print(read_file('/nonexistent'))

finally ร่วมกับ return

หากมีทั้ง return และ finally, finally จะทำงานก่อน แต่ค่าที่คืนจาก finally จะมีผลเหนือกว่า ควรระมัดระวัง
def demo():
    try:
        return 'try'
    finally:
        return 'finally'  # overrides!
print(demo())

บล็อก try ซ้อนกัน

บล็อก try สามารถซ้อนกันได้ ข้อยกเว้นภายในจะถูกส่งต่อออกไปด้านนอก หาก except ภายในไม่ได้ดักจับไว้
try:
    try:
        x = 1/0
    except ValueError:
        print('inner')
except ZeroDivisionError:
    print('outer caught it')

การบันทึกข้อยกเว้น

import logging; logging.exception('msg') บันทึกแทรซแบ็กทั้งหมด เหมาะอย่างยิ่งในโค้ดที่ใช้งานจริง
import logging
try:
    1/0
except ZeroDivisionError:
    logging.exception('Caught an error')

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

ส่วนคำสั่งใดทำงานไม่ว่าจะเกิดข้อยกเว้นหรือไม่?

สรุป

try/except ดักจับข้อผิดพลาด else ทำงานเมื่อสำเร็จ finally ทำงานเสมอเพื่อการล้างทรัพยากร ควรดักจับประเภทที่เฉพาะเจาะจงและหลีกเลี่ยง except เปล่า ใช้ as e เพื่อเข้าถึงข้อยกเว้น

ไปต่อ

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

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

บทเรียน “try / except / else / finally” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “try / except / else / finally”

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

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

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

บทเรียน “try / except / else / finally” ใช้เวลานานแค่ไหน

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

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

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

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

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