Python การจัดการข้อยกเว้น: try, except, finally, raise

⚡ สรุปอย่างชาญฉลาด

Python การจัดการข้อยกเว้นช่วยให้โปรแกรมของคุณตอบสนองต่อข้อผิดพลาดขณะทำงานได้แทนที่จะหยุดทำงาน ในที่นี้คุณจะได้เรียนรู้วิธีการทำงานของ try, except, finally และ raise เหตุใดข้อยกเว้นจึงมีความสำคัญ และประเภทข้อผิดพลาดพื้นฐานทั่วไปที่คุณจะพบเจอ

  • ⚠️ มันคืออะไร: ข้อยกเว้นคือข้อผิดพลาดขณะรันไทม์ที่ Python ขึ้นเงินเดือนเมื่อมีบางอย่างผิดพลาด
  • 🛡️ ลอง / ยกเว้น: บล็อก try จะรันโค้ดที่มีความเสี่ยง ส่วนบล็อก except จะดักจับและจัดการกับข้อยกเว้น
  • 🧹 สุดท้าย: บล็อก finally จะทำงานเสมอ ไม่ว่าจะเกิดข้อผิดพลาดหรือไม่ก็ตาม
  • 🚀 ยก: คำสั่ง raise ช่วยให้คุณสามารถทำให้เกิดข้อผิดพลาดได้โดยเจตนา
  • 📋 ประเภทของข้อผิดพลาด: ข้อผิดพลาดที่พบบ่อย ได้แก่ ValueError, KeyError, IndexError และ ZeroDivisionError
  • 🤖 ความช่วยเหลือจาก AI: เครื่องมือ AI เช่น Copilot สร้างบล็อก try-except และแนะนำประเภทข้อผิดพลาด

Python การจัดการข้อยกเว้น

การจัดการข้อยกเว้นคืออะไร Python?

ข้อยกเว้นคือข้อผิดพลาดที่เกิดขึ้นในขณะที่รันโปรแกรม อย่างไรก็ตามในขณะที่รันโปรแกรม Python สร้างข้อยกเว้นที่ควรได้รับการจัดการเพื่อหลีกเลี่ยงไม่ให้โปรแกรมของคุณเสียหาย ใน Python ภาษา ข้อยกเว้นจะทริกเกอร์โดยอัตโนมัติเมื่อมีข้อผิดพลาด หรือโค้ดของคุณอาจถูกทริกเกอร์และดักจับได้

ข้อยกเว้นระบุว่าถึงแม้เหตุการณ์ดังกล่าวจะเกิดขึ้นได้ แต่เหตุการณ์ประเภทนี้จะเกิดขึ้นไม่บ่อยนัก เมื่อเมธอดไม่สามารถจัดการข้อยกเว้นได้ เมธอดจะถูกส่งไปยังฟังก์ชันผู้เรียก ในที่สุดเมื่อมีการโยนข้อยกเว้นออกจากฟังก์ชันหลัก โปรแกรมจะถูกยกเลิกอย่างกะทันหัน

ตัวอย่างทั่วไปของข้อยกเว้น

  • การหารด้วยศูนย์
  • การเข้าถึงไฟล์ที่ไม่มีอยู่
  • การเพิ่มสองประเภทที่เข้ากันไม่ได้
  • กำลังพยายามเข้าถึงดัชนีที่ไม่มีอยู่ของลำดับ
  • การลบตารางออกจากเซิร์ฟเวอร์ฐานข้อมูลที่ไม่ได้เชื่อมต่อ
  • ถอนเงินผ่านตู้ ATM เกินกว่าจำนวนเงินที่มีอยู่

เหตุใดคุณจึงควรใช้ข้อยกเว้น

ต่อไปนี้เป็นเหตุผลในการใช้ข้อยกเว้นใน Python:

  • การจัดการข้อยกเว้นช่วยให้คุณสามารถแยกโค้ดการจัดการข้อผิดพลาดออกจากโค้ดปกติได้
  • ข้อยกเว้นคือ Python วัตถุ ซึ่งแสดงถึงข้อผิดพลาด
  • เช่นเดียวกับความคิดเห็นเกี่ยวกับโค้ด ข้อยกเว้นจะช่วยให้คุณเตือนตัวเองถึงสิ่งที่โปรแกรมคาดหวัง
  • มันทำให้โค้ดชัดเจนและเพิ่มความสามารถในการอ่าน
  • ช่วยให้คุณกระตุ้นผลที่ตามมาเมื่อการจัดการข้อผิดพลาดเกิดขึ้นในที่เดียวและในลักษณะเดียว
  • ข้อยกเว้นเป็นวิธีที่สะดวกในการจัดการข้อความแสดงข้อผิดพลาด
  • In Pythonคุณสามารถเพิ่มข้อยกเว้นในโปรแกรมได้โดยใช้วิธีการยกข้อยกเว้น
  • การเพิ่มข้อยกเว้นช่วยให้คุณสามารถหยุดการเรียกใช้โค้ดปัจจุบัน และส่งคืนข้อยกเว้นกลับไปตามที่คาดไว้จนกว่าจะได้รับการจัดการ
  • กำลังประมวลผลข้อยกเว้นสำหรับส่วนประกอบที่ไม่สามารถจัดการได้โดยตรง

กฎข้อยกเว้น

ต่อไปนี้เป็นกฎสำคัญบางประการของ Python การจัดการข้อยกเว้น:

  • ข้อยกเว้นจะต้องเป็นวัตถุคลาส
  • สำหรับข้อยกเว้นในชั้นเรียน คุณสามารถใช้คำสั่ง try พร้อมกับส่วนคำสั่งยกเว้นที่กล่าวถึงคลาสใดคลาสหนึ่งได้
  • แม้ว่าคำสั่งหรือนิพจน์จะมีความถูกต้องทางวากยสัมพันธ์ แต่ก็อาจแสดงข้อผิดพลาดเมื่อมีการพยายามดำเนินการ
  • ข้อผิดพลาดที่พบระหว่างการดำเนินการเรียกว่าข้อยกเว้น และไม่เป็นอันตรายถึงชีวิตโดยไม่มีเงื่อนไข

Python กลไกการจัดการข้อยกเว้น

การจัดการข้อยกเว้นจะถูกจัดการโดยคีย์เวิร์ด 5 คำต่อไปนี้:

  1. ลอง
  2. จับ
  3. ในที่สุด
  4. โยน

Python ลองใช้คำสั่ง

คำสั่ง try ประกอบด้วยคำสำคัญ try ตามด้วยเครื่องหมายทวิภาค (:) และชุดโค้ดที่อาจเกิดข้อยกเว้น มีหนึ่งหรือหลายข้อ

ในระหว่างการดำเนินการของคำสั่ง try หากไม่มีข้อยกเว้นเกิดขึ้น ล่ามจะละเว้นตัวจัดการข้อยกเว้นสำหรับคำสั่ง try ที่ระบุนั้น

ในกรณีที่เกิดข้อยกเว้นใดๆ ในชุดการลอง ชุดการลองนั้นจะหมดอายุและการควบคุมโปรแกรมจะถูกโอนไปยังตัวจัดการข้อยกเว้นที่ตรงกันซึ่งตามหลังชุดการลอง

Syntax:
try:
statement(s)

คำสั่งจับ

บล็อก catch รับอาร์กิวเมนต์ครั้งละหนึ่งรายการ ซึ่งเป็นประเภทของข้อยกเว้นที่มีแนวโน้มที่จะตรวจจับได้ อาร์กิวเมนต์เหล่านี้อาจมีตั้งแต่ประเภทข้อยกเว้นเฉพาะเจาะจงซึ่งสามารถเปลี่ยนแปลงได้ไปจนถึงหมวดหมู่ข้อยกเว้นที่รับทั้งหมด

กฎเกณฑ์สำหรับ catch block:

  • คุณสามารถกำหนด catch block ได้โดยใช้คีย์เวิร์ด catch
  • พารามิเตอร์ Catch Exception จะอยู่ในวงเล็บเสมอ
  • มันแสดงถึงประเภทของข้อยกเว้นที่จับตัวบล็อกเสมอ
  • โค้ดการจัดการข้อยกเว้นถูกเขียนระหว่างเครื่องหมายปีกกา {} สองตัว
  • คุณสามารถวาง catch block หลายอันภายในบล็อกเดียวได้
  • คุณสามารถใช้ catch block ได้หลังจาก try block เท่านั้น
  • ควรเรียงลำดับบล็อก catch ทั้งหมดจากคลาสย่อยถึงข้อยกเว้นซูเปอร์คลาส

ตัวอย่าง:

try
}
catch (ArrayIndexOutOfBoundsException e) {
System.err.printin("Caught first " + e.getMessage()); } catch (IOException e) {
System.err.printin("Caught second " + e.getMessage());
}

คำชี้แจงสุดท้ายใน Python

ในที่สุดการบล็อกจะดำเนินการเสมอไม่ว่าจะมีข้อยกเว้นเกิดขึ้นหรือไม่ก็ตาม คำหลักสุดท้ายช่วยให้คุณสร้างบล็อกของโค้ดที่ตามหลังบล็อก try-catch

สุดท้ายนี้ clause เป็นทางเลือก มีจุดมุ่งหมายเพื่อกำหนดการดำเนินการทำความสะอาดซึ่งควรดำเนินการในทุกสภาวะ

try:
    raise KeyboardInterrupt
finally:
    print 'welcome, world!'
Output
Welcome, world!
KeyboardInterrupt

ในที่สุด clause จะถูกดำเนินการก่อนคำสั่ง try

ยกคำชี้แจงใน Python

คำสั่ง Raise ระบุอาร์กิวเมนต์ที่เตรียมใช้งานวัตถุข้อยกเว้น ในที่นี้ เครื่องหมายจุลภาคตามหลังชื่อข้อยกเว้น และอาร์กิวเมนต์หรือทูเพิลของอาร์กิวเมนต์ที่ตามหลังเครื่องหมายจุลภาค

ไวยากรณ์:

raise [Exception [, args [, traceback]]]

ในรูปแบบนี้ อาร์กิวเมนต์เป็นทางเลือก และในขณะที่ดำเนินการ ค่าอาร์กิวเมนต์ข้อยกเว้นจะเป็นไม่มีเสมอไป
ตัวอย่าง:
A Python ข้อยกเว้นอาจเป็นค่าใดๆ เช่น สตริง คลาส หมายเลข หรืออ็อบเจ็กต์ ข้อยกเว้นเหล่านี้ส่วนใหญ่ได้รับการหยิบยกขึ้นมาโดย Python core คือคลาสที่มีอาร์กิวเมนต์ซึ่งเป็นอินสแตนซ์ของคลาส

สำคัญ Python ข้อผิดพลาด

ประเภทข้อผิดพลาด Descriptไอออน
ข้อผิดพลาดทางคณิตศาสตร์ ArithmeticError ทำหน้าที่เป็นคลาสฐานสำหรับข้อยกเว้นทางคณิตศาสตร์ทั้งหมด คลาสนี้จะถูกเรียกใช้งานสำหรับข้อผิดพลาดในการดำเนินการทางคณิตศาสตร์
ข้อผิดพลาดในการนำเข้า ข้อผิดพลาด ImportError เกิดขึ้นเมื่อคุณพยายามนำเข้าโมดูลที่ไม่มีอยู่จริง ข้อผิดพลาดประเภทนี้เกิดขึ้นหากคุณได้ทำการ ty แล้วping ความผิดพลาดในชื่อโมดูล หรือโมดูลนั้นไม่มีอยู่ในพาธมาตรฐาน
ดัชนีข้อผิดพลาด IndexErroris เกิดขึ้นเมื่อคุณพยายามอ้างอิงลำดับที่อยู่นอกช่วง
ข้อผิดพลาดที่สำคัญ เมื่อไม่พบคีย์เฉพาะในพจนานุกรม ข้อยกเว้นของ KeyError จะเกิดขึ้น
ชื่อผิดพลาด NameError เกิดขึ้นเมื่อชื่อถูกอ้างถึงในโค้ดที่ไม่เคยมีอยู่ในเนมสเปซท้องถิ่นหรือส่วนกลาง
ค่าข้อผิดพลาด ข้อผิดพลาดของค่าจะเกิดขึ้นเมื่อฟังก์ชันหรือการดำเนินการภายในได้รับอาร์กิวเมนต์ซึ่งอาจเป็นประเภทที่ถูกต้องแต่ไม่มีค่าที่เหมาะสม
EOFerror ข้อผิดพลาดประเภทนี้เกิดขึ้นเมื่อหนึ่งในฟังก์ชันในตัว (input() หรือ raw_input()) ถึงเงื่อนไข EOF โดยไม่อ่านข้อมูลใดๆ
ZeroDivisonError ข้อผิดพลาดประเภทนี้เกิดขึ้นเมื่อหารหรือโมดูลด้วยศูนย์เกิดขึ้นสำหรับประเภทตัวเลขทั้งหมด
IO ผิดพลาด- ข้อผิดพลาดประเภทนี้เกิดขึ้นเมื่อการดำเนินการอินพุต/เอาต์พุตล้มเหลว
ข้อผิดพลาดทางไวยากรณ์ SyntaxErrors เกิดขึ้นเมื่อมีข้อผิดพลาด Python วากยสัมพันธ์
ข้อผิดพลาดการเยื้อง ข้อผิดพลาดนี้เกิดขึ้นเมื่อไม่ได้กำหนดการเยื้องอย่างถูกต้อง

ที่สำคัญอื่นๆ Python ข้อยกเว้น

ข้อยกเว้น Descriptไอออน
เลขคณิตข้อยกเว้น ข้อผิดพลาดทางคณิตศาสตร์ เช่น การหารด้วยศูนย์
ArraylndexOutOfBoundsException ดัชนีอาร์เรย์อยู่นอกขอบเขต
ArrayStoreException การมอบหมายช่วยให้คุณองค์ประกอบอาร์เรย์ของประเภทที่เข้ากันไม่ได้
ClassCastException นักแสดงไม่ถูกต้อง
MlegalMonitorStateException การดำเนินการตรวจสอบที่ผิดกฎหมาย เช่น การรอเธรดที่ปลดล็อค
MlegalStateException สภาพแวดล้อมหรือแอปพลิเคชันอยู่ในสถานะที่ไม่ถูกต้อง
ClassNotFoundException ไม่พบชั้นเรียน
CloneNotSupportedException พยายามโคลนวัตถุที่ไม่ได้ใช้อินเทอร์เฟซ Cloneable
ข้อยกเว้นการเข้าถึงที่ผิดกฎหมาย การเข้าถึงชั้นเรียนถูกปฏิเสธ
ข้อยกเว้นอินสแตนซ์ เกิดขึ้นเมื่อคุณพยายามสร้างอ็อบเจ็กต์ของอินเทอร์เฟซหรือค่าสัมบูรณ์tracคลาส t
CloneNotSupportedException พยายามโคลนวัตถุที่ไม่ได้ใช้อินเทอร์เฟซ

ข้อผิดพลาดกับข้อยกเว้น

ความผิดพลาด ข้อยกเว้น
ข้อผิดพลาดทั้งหมดใน Python เป็นประเภทที่ไม่ได้เลือก ข้อยกเว้นมีทั้งประเภทที่เลือกและไม่ได้เลือก
เกิดข้อผิดพลาดขณะรันไทม์ซึ่งคอมไพเลอร์ไม่รู้จัก ข้อยกเว้นสามารถกู้คืนได้โดยการจัดการโดยใช้บล็อก try-catch
ข้อผิดพลาดส่วนใหญ่เกิดจากสภาพแวดล้อมที่แอปพลิเคชันทำงานอยู่ แอปพลิเคชันเองทำให้เกิดข้อยกเว้น
ตัวอย่าง:
ข้อผิดพลาด OutofMemory
ตัวอย่าง:
ข้อยกเว้นที่ตรวจสอบ, ข้อยกเว้น SQL, NullPointerException ฯลฯ

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

การจัดการข้อผิดพลาดคือกระบวนการตอบสนองต่อข้อผิดพลาดขณะรันไทม์ เพื่อป้องกันไม่ให้โปรแกรมหยุดทำงาน Python ใช้บล็อก try และ except เพื่อดักจับข้อผิดพลาดและเรียกใช้โค้ดแก้ไขแทน

Code โค้ดส่วนนั้นอาจล้มเหลวและต้องอยู่ภายในบล็อก try หากเกิดข้อยกเว้นขึ้น Python ข้ามไปยังบล็อก except ที่ตรงกัน ซึ่งจะจัดการข้อผิดพลาดและอนุญาตให้โปรแกรมทำงานต่อไปได้

บล็อก finally จะทำงานไม่ว่าจะมีข้อผิดพลาดเกิดขึ้นหรือไม่ก็ตาม ดังนั้นจึงเหมาะสำหรับงานทำความสะอาด เช่น การปิดไฟล์หรือการปล่อยทรัพยากร ซึ่งต้องเกิดขึ้นเสมอ

คำสั่ง raise จะทำให้เกิดข้อยกเว้นโดยเจตนา คุณสามารถใช้ข้อยกเว้นสำเร็จรูป เช่น ValueError หรือข้อยกเว้นที่กำหนดเอง เพื่อส่งสัญญาณว่าเกิดข้อผิดพลาดขึ้น

ข้อผิดพลาด เช่น SyntaxError มักไม่สามารถแก้ไขได้และจะทำให้โปรแกรมหยุดทำงาน ส่วนข้อยกเว้นเป็นเหตุการณ์ที่เกิดขึ้นขณะรันไทม์ ซึ่งคุณสามารถดักจับและจัดการได้ด้วยบล็อก try และ except

ผู้ช่วย AI อย่าง GitHub Copilot จะเติมข้อความอัตโนมัติในบล็อก try-except แนะนำประเภทข้อยกเว้นที่เหมาะสมที่จะดักจับ และสร้างโค้ดสำหรับล้างข้อมูลในขั้นตอนสุดท้ายจากคำอธิบายสั้นๆ เกี่ยวกับตรรกะของคุณ

ใช่แล้ว เครื่องมือที่ขับเคลื่อนด้วย AI สามารถทำการห่อสินค้าโดยอัตโนมัติได้ping การเขียนโค้ดที่เสี่ยงในบล็อก try-except แนะนำให้ใช้ข้อยกเว้นเฉพาะเจาะจงแทน except แบบไม่มีเงื่อนไข และเพิ่มการบันทึกข้อมูลเพื่อให้แก้ไขข้อผิดพลาดได้ง่ายขึ้น

ข้อยกเว้นในตัวที่พบได้ทั่วไป ได้แก่ ValueError, TypeError, KeyError, IndexError, ImportError, NameError และ ZeroDivisionError แต่ละข้อบ่งชี้ถึงปัญหาการทำงานของโค้ดในขณะรันไทม์ที่เฉพาะเจาะจง

สรุปโพสต์นี้ด้วย: