System Level Exception vs Application Level Exception
รับวาสน์ โมราสุข 650710839
Exception คืออะไร ?
Exception คือข้อผิดพลาดหรือเหตุการณ์ที่ไม่คาดคิดที่เกิดขึ้นระหว่างการทำงานของโปรแกรม ซึ่งขัดขวางขั้นตอนของคำสั่งโปรแกรม และบางครั้งก็เกิดขึ้นระหว่างการทำงานของโปรแกรม มีความเป็นไปได้ที่โปรแกรมอาจหยุดทำงานหรือเกิดเหตุการณ์ที่ unexpected ระหว่าง runtime execution
Types of Exception in C#
System Level Exception
Application Level Exception

System Level Exception in C#
เกิดขึ้นเมื่อพบข้อผิดพลาดร้ายแรงหรือไม่สามารถกู้คืนได้ เช่น ฐานข้อมูลล่ม ข้อผิดพลาดที่ถูกผูกไว้ etc.
แสดงถึง Exceptions ที่เกี่ยวข้องกับระบบ เช่น การหารด้วยศูนย์ ข้อผิดพลาดที่อยู่นอกช่วง
System Exceptions ได้รับการสืบทอดมาจากคลาส
System.SystemExceptionซึ่งเป็นคลาสที่สืบทอดมาจากSystemException
Examples
OutOfMemoryException: หน่วยความจำไม่เพียงพอสำหรับดำเนินการ
IOException: ข้อผิดพลาดในการอ่าน/เขียนข้อมูลจาก I/O เช่น ไฟล์หรือเน็ตเวิร์ค
StackOverflowException: เกิดจาก recursion ที่ลึกเกินไป
DivideByZeroException: เกิดจากการหารด้วยศูนย์
Application Level Exception in C#
เกิดขึ้นเมื่อพบข้อผิดพลาดที่สามารถกู้คืนได้ เช่น ข้อมูลอินพุตผิดประเภท ข้อยกเว้นทางคณิตศาสตร์ etc.
แสดงถึง exceptions ที่ผู้ใช้กำหนดเอง (less commonly used).
Application Exceptions ได้รับการสืบทอดมาจากคลาส
System.ApplicationExceptionซึ่งเป็นคลาสที่สืบทอดมาจากSystemExceptionโดยส่วนใหญ่แล้ว โปรแกรมจะสามารถกลับมาดำเนินการตามคำสั่งปกติได้หลังจากแก้ไข Exception ประเภทนี้แล้ว
Examples
InvalidArgumentException: เกิดจากการส่งพารามิเตอร์ที่ไม่ถูกต้องให้กับฟังก์ชัน
FileNotFoundException: หาไฟล์ที่ต้องการไม่เจอ
IndexOutOfRangeException: ค่าใน array ที่ index เกินขอบเขต
Code Example
การอธิบายโค้ด :
DivideByZeroException: ใช้จับ Exception ที่พยายามทำการหารด้วยศูนย์ จะถูกแสดงในcatchblockOutput : " DivideByZeroException occurred: Attempted to divide by zero. "
การอธิบายโค้ด :
IndexOutOfRangeException: ใช้จับข้อยกเว้นประเภทIndexOutOfRangeExceptionการเข้าถึง index ที่อยู่นอกขอบเขต จะถูกแสดงในcatchblockOutput : " Application-Level Exception: Index was outside the bounds of the array. "
C# VS Java

ภาษา Java จะมี Structure ที่แตกต่างจากภาษา C# ( ไม่มี System Exception กับ Application Exception ) โดยจะแบ่ง Exception เป็น 2 กลุ่มหลักๆ ได้แก่
Check Exception
คือ Exceptions ที่คอมไพเลอร์ Java ต้องการให้เราจัดการอย่างชัดเจน ซึ่งคนเขียนฟังก์ชันรู้อยู่แล้วว่ามันจะต้องเกิด Exception พวกนี้ขึ้นมาแน่ๆ เช่น IOException , FileNotFoundException etc.
File file = new File("fake_file.txt");พยายามเปิดไฟล์ที่ชื่อ "fake_file.txt" ซึ่งไม่มีอยู่ ทำให้เกิดFileNotFoundException
Scanner scanner = new Scanner(file);: เมื่อพยายามสร้างออบเจ็กต์Scannerจากไฟล์นี้ ระบบจะโยนFileNotFoundExceptionเพราะไฟล์หาไม่พบ
"Not Found File Path"
Uncheck exception
คือ Runtime exception ที่คอมไพเลอร์ Java ไม่บังคับให้เราจัดการอย่างชัดเจน มักเกี่ยวข้องกับข้อผิดพลาดในการเขียนโปรแกรมที่ควรจะได้รับการแก้ไขในระหว่างการพัฒนา เช่น การใช้งาน object ที่เป็น null
จะเห็นว่าโปรแกรมไม่บังคับให้จัดการกับ exceptions ประเภทนี้ หากไม่จัดการก็ยังสามารถ compile ได้แต่ถ้ารันโปรแกรมจะเกิด
NullPointerException
text.length()พยายามเรียกหาความยาวของ String text แต่ text มีค่าเป็น null จะทำให้เกิดNullPointerExceptionOutput : "Exception in thread "main" java.lang.NullPointerException: Cannot invoke "String.length()" because "text" is null at Main.main(Main.java:4) "
C# VS C
ในภาษา C ไม่มีการจัดการ Exception ที่สร้างขึ้นมาในตัว User ต้องทำการเขียนขึ้นมาเอง โดยการใช้คำสั่ง return ส่งคืนค่า -1 หรือ NULL
จาก
divide(int a, int b)จะมีตัวเช็คว่าส่วนที่นำไปหารเป็น 0 หรือไม่ ถ้าเป็น 0 ก็จะ return -1 แต่ถ้าไม่เป็น 0 จะ return ค่าของ a การด้วย b กลับไป
C# VS Python
ภาษา Python จะมี Structure ที่แตกต่างจากภาษา C# ( ไม่มี System Exception กับ Application Exception ) จะมี Exception Handling คือ
try: block ที่ให้ใส่ code ปกติ ที่อาจะเกิด error ได้except: block ที่เอาไว้ handle errorraise: block ที่ใช้สำหรับ raise error เป็นการ force exception.else: block ที่จะทำงานเมื่อไม่มี exception เท่านั้นfinally: block ที่จะทำงานตลอด ไม่ได้สนใจว่าต้องมี exception

ถ้า parameters ตัวหารมีเป็นค่า 0 จะเกิด
ZeroDivisionErrorเข้า block except และบังคับเข้า finally แต่ถ้าตัวหารไม่ใช่ 0 จะเข้า block try , else และบังคับ finallyเมื่อเรียกใช้
force_error()จะบังคับ raise exception
References
Last updated





