Python การจัดการข้อยกเว้น: ลอง จับ ในที่สุด & เพิ่ม [ตัวอย่าง]
การจัดการข้อยกเว้นคืออะไร Python?
ข้อยกเว้นคือข้อผิดพลาดที่เกิดขึ้นในขณะที่รันโปรแกรม อย่างไรก็ตามในขณะที่รันโปรแกรม Python สร้างข้อยกเว้นที่ควรได้รับการจัดการเพื่อหลีกเลี่ยงไม่ให้โปรแกรมของคุณเสียหาย ใน Python ภาษา ข้อยกเว้นจะทริกเกอร์โดยอัตโนมัติเมื่อมีข้อผิดพลาด หรือโค้ดของคุณอาจถูกทริกเกอร์และดักจับได้
ข้อยกเว้นระบุว่าถึงแม้เหตุการณ์ดังกล่าวจะเกิดขึ้นได้ แต่เหตุการณ์ประเภทนี้จะเกิดขึ้นไม่บ่อยนัก เมื่อเมธอดไม่สามารถจัดการข้อยกเว้นได้ เมธอดจะถูกส่งไปยังฟังก์ชันผู้เรียก ในที่สุดเมื่อมีการโยนข้อยกเว้นออกจากฟังก์ชันหลัก โปรแกรมจะถูกยกเลิกอย่างกะทันหัน
ตัวอย่างทั่วไปของข้อยกเว้น
- การหารด้วยศูนย์
- การเข้าถึงไฟล์ที่ไม่มีอยู่
- การเพิ่มสองประเภทที่เข้ากันไม่ได้
- กำลังพยายามเข้าถึงดัชนีที่ไม่มีอยู่ของลำดับ
- การลบตารางออกจากเซิร์ฟเวอร์ฐานข้อมูลที่ไม่ได้เชื่อมต่อ
- ถอนเงินผ่านตู้ ATM เกินกว่าจำนวนเงินที่มีอยู่
เหตุใดคุณจึงควรใช้ข้อยกเว้น
ต่อไปนี้เป็นเหตุผลในการใช้ข้อยกเว้นใน Python:
- การจัดการข้อยกเว้นช่วยให้คุณสามารถแยกโค้ดการจัดการข้อผิดพลาดออกจากโค้ดปกติได้
- ข้อยกเว้นคือ Python วัตถุ ซึ่งแสดงถึงข้อผิดพลาด
- เช่นเดียวกับความคิดเห็นเกี่ยวกับโค้ด ข้อยกเว้นจะช่วยให้คุณเตือนตัวเองถึงสิ่งที่โปรแกรมคาดหวัง
- มันทำให้โค้ดชัดเจนและเพิ่มความสามารถในการอ่าน
- ช่วยให้คุณกระตุ้นผลที่ตามมาเมื่อการจัดการข้อผิดพลาดเกิดขึ้นในที่เดียวและในลักษณะเดียว
- ข้อยกเว้นเป็นวิธีที่สะดวกในการจัดการข้อความแสดงข้อผิดพลาด
- In Pythonคุณสามารถเพิ่มข้อยกเว้นในโปรแกรมได้โดยใช้วิธีการยกข้อยกเว้น
- การเพิ่มข้อยกเว้นช่วยให้คุณสามารถหยุดการเรียกใช้โค้ดปัจจุบัน และส่งคืนข้อยกเว้นกลับไปตามที่คาดไว้จนกว่าจะได้รับการจัดการ
- กำลังประมวลผลข้อยกเว้นสำหรับส่วนประกอบที่ไม่สามารถจัดการได้โดยตรง
กฎข้อยกเว้น
ต่อไปนี้เป็นกฎสำคัญบางประการของ Python การจัดการข้อยกเว้น:
- ข้อยกเว้นจะต้องเป็นวัตถุคลาส
- สำหรับข้อยกเว้นในชั้นเรียน คุณสามารถใช้คำสั่ง try พร้อมกับส่วนคำสั่งยกเว้นที่กล่าวถึงคลาสใดคลาสหนึ่งได้
- แม้ว่าคำสั่งหรือนิพจน์จะมีความถูกต้องทางวากยสัมพันธ์ แต่ก็อาจแสดงข้อผิดพลาดเมื่อมีการพยายามดำเนินการ
- ข้อผิดพลาดที่พบระหว่างการดำเนินการเรียกว่าข้อยกเว้น และไม่เป็นอันตรายถึงชีวิตโดยไม่มีเงื่อนไข
Python กลไกการจัดการข้อยกเว้น
การจัดการข้อยกเว้นจะถูกจัดการโดยคีย์เวิร์ด 5 คำต่อไปนี้:
- ลอง
- จับ
- ในที่สุด
- โยน
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 เกิดขึ้นเมื่อคุณพยายามนำเข้าโมดูลที่ไม่มีอยู่ ข้อยกเว้นประเภทนี้เกิดขึ้นหากคุณพิมพ์ชื่อโมดูลหรือโมดูลที่ไม่อยู่ในเส้นทางมาตรฐานผิดพลาด |
| ดัชนีข้อผิดพลาด | IndexErroris เกิดขึ้นเมื่อคุณพยายามอ้างอิงลำดับที่อยู่นอกช่วง |
| ข้อผิดพลาดที่สำคัญ | เมื่อไม่พบคีย์เฉพาะในพจนานุกรม ข้อยกเว้นของ KeyError จะเกิดขึ้น |
| ชื่อผิดพลาด | NameError เกิดขึ้นเมื่อชื่อถูกอ้างถึงในโค้ดที่ไม่เคยมีอยู่ในเนมสเปซท้องถิ่นหรือส่วนกลาง |
| ค่าข้อผิดพลาด | ข้อผิดพลาดของค่าจะเกิดขึ้นเมื่อฟังก์ชันหรือการดำเนินการภายในได้รับอาร์กิวเมนต์ซึ่งอาจเป็นประเภทที่ถูกต้องแต่ไม่มีค่าที่เหมาะสม |
| EOFerror | ข้อผิดพลาดประเภทนี้เกิดขึ้นเมื่อหนึ่งในฟังก์ชันในตัว (input() หรือ raw_input()) ถึงเงื่อนไข EOF โดยไม่อ่านข้อมูลใดๆ |
| ZeroDivisonError | ข้อผิดพลาดประเภทนี้เกิดขึ้นเมื่อหารหรือโมดูลด้วยศูนย์เกิดขึ้นสำหรับประเภทตัวเลขทั้งหมด |
| IO ผิดพลาด- | ข้อผิดพลาดประเภทนี้เกิดขึ้นเมื่อการดำเนินการอินพุต/เอาต์พุตล้มเหลว |
| ข้อผิดพลาดทางไวยากรณ์ | SyntaxErrors เกิดขึ้นเมื่อมีข้อผิดพลาด Python วากยสัมพันธ์ |
| ข้อผิดพลาดการเยื้อง | ข้อผิดพลาดนี้เกิดขึ้นเมื่อไม่ได้กำหนดการเยื้องอย่างถูกต้อง |
ที่สำคัญอื่นๆ Python ข้อยกเว้น
| ข้อยกเว้น | Descriptไอออน |
|---|---|
| เลขคณิตข้อยกเว้น | ข้อผิดพลาดทางคณิตศาสตร์ เช่น การหารด้วยศูนย์ |
| ArraylndexOutOfBoundsException | ดัชนีอาร์เรย์อยู่นอกขอบเขต |
| ArrayStoreException | การมอบหมายช่วยให้คุณองค์ประกอบอาร์เรย์ของประเภทที่เข้ากันไม่ได้ |
| ClassCastException | นักแสดงไม่ถูกต้อง |
| MlegalMonitorStateException | การดำเนินการตรวจสอบที่ผิดกฎหมาย เช่น การรอเธรดที่ปลดล็อค |
| MlegalStateException | สภาพแวดล้อมหรือแอปพลิเคชันอยู่ในสถานะที่ไม่ถูกต้อง |
| ClassNotFoundException | ไม่พบชั้นเรียน |
| CloneNotSupportedException | พยายามโคลนวัตถุที่ไม่ได้ใช้อินเทอร์เฟซ Cloneable |
| ข้อยกเว้นการเข้าถึงที่ผิดกฎหมาย | การเข้าถึงชั้นเรียนถูกปฏิเสธ |
| ข้อยกเว้นอินสแตนซ์ | เกิดขึ้นเมื่อคุณพยายามสร้างวัตถุของอินเทอร์เฟซหรือคลาสนามธรรม |
| CloneNotSupportedException | พยายามโคลนวัตถุที่ไม่ได้ใช้อินเทอร์เฟซ |
ข้อผิดพลาดกับข้อยกเว้น
| ความผิดพลาด | ข้อยกเว้น |
|---|---|
| ข้อผิดพลาดทั้งหมดใน Python เป็นประเภทที่ไม่ได้เลือก | ข้อยกเว้นมีทั้งประเภทที่เลือกและไม่ได้เลือก |
| เกิดข้อผิดพลาดขณะรันไทม์ซึ่งคอมไพเลอร์ไม่รู้จัก | ข้อยกเว้นสามารถกู้คืนได้โดยการจัดการโดยใช้บล็อก try-catch |
| ข้อผิดพลาดส่วนใหญ่เกิดจากสภาพแวดล้อมที่แอปพลิเคชันทำงานอยู่ | แอปพลิเคชันเองทำให้เกิดข้อยกเว้น |
| ตัวอย่าง: ข้อผิดพลาด OutofMemory |
ตัวอย่าง: ข้อยกเว้นที่ตรวจสอบ, ข้อยกเว้น SQL, NullPointerException ฯลฯ |
สรุป
- ข้อยกเว้นคือข้อผิดพลาดที่เกิดขึ้นระหว่างการทำงานของโปรแกรม
- ข้อยกเว้นระบุว่าถึงแม้เหตุการณ์ดังกล่าวจะเกิดขึ้นได้ แต่เหตุการณ์ประเภทนี้จะเกิดขึ้นไม่บ่อยนัก
- ตัวอย่างทั่วไปของข้อยกเว้นคือ 1) การหารด้วยศูนย์ 2) การเข้าถึงไฟล์ที่ไม่มีอยู่ 3) การเพิ่มประเภทที่เข้ากันไม่ได้อีกสองประเภท
- ข้อยกเว้นคือ Python วัตถุที่แสดงถึงข้อผิดพลาด
- คำสั่ง try ประกอบด้วยคำสำคัญ try ตามด้วยเครื่องหมายทวิภาค (:) และชุดโค้ดที่อาจเกิดข้อยกเว้น มีหนึ่งหรือหลายข้อ
- บล็อก catch รับอาร์กิวเมนต์ครั้งละหนึ่งรายการ ซึ่งเป็นประเภทของข้อยกเว้นที่มีแนวโน้มที่จะตรวจจับได้
- คำสั่ง Raise ระบุอาร์กิวเมนต์ที่เตรียมใช้งานวัตถุข้อยกเว้น
- สุดท้ายนี้ block จะดำเนินการเสมอไม่ว่าจะมีข้อยกเว้นเกิดขึ้นหรือไม่ก็ตาม
