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 จะดำเนินการเสมอไม่ว่าจะมีข้อยกเว้นเกิดขึ้นหรือไม่ก็ตาม