Page cover image

How to use Multiple Catch Clause

วริศรา ป้ายงูเหลือม 650710840

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

การใช้บล็อค Multiple Catch Clause

จะนํา catch มาต่อกันไปเหมือนแยกส่วนเป็นชั้น ๆ ไปเรื่อยๆ

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

- Multiple Catch Clause ในภาษาต่างๆ

C#

ตัวอย่าง

บล็อก try จะสร้างเหตุการณ์ผิดปรกติ ดังนั้นเราจะใช้บล็อก catch สามประเภทที่แตกต่างกันเพื่อจัดการข้อผิดพลาดที่เกิดจากบล็อก try

  • บล็อก catch 1 จะจัดการIndexOutOfRangeException

  • บล็อก catch 2 จะจัดการFormatException

  • บล็อก catch 3 จะจัดการOverflowException

using System; 
class GFG { 
	// Main method 
	static void Main() 
	{ 
		// This block raises an exception 
		try { 

			byte data = byte.Parse("a"); 
			Console.WriteLine(data); 
		} 
		// Catch block 1 
		catch (IndexOutOfRangeException) { 
			Console.WriteLine("At least provide one Argument!"); 
		} 
		// Catch block 2 
		catch (FormatException) { 
			Console.WriteLine("Entered value in not a number!"); 
		} 

		// Catch block 3 
		catch (OverflowException) { 
			Console.WriteLine("Data is out of Range!"); 
		} 
	} 
}

Java

ตัวอย่าง

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

public class MyClass {
	
	public static void main(String[] args) {
		
		  try {
				 int x = 200 ;
			     int y = 0 ;
			     int z = x / y;
			     System.out.println(" x / y = " + z) ;
	        } catch(ArithmeticException e) {
	             System.out.println("Number Incorrect.");
	        } catch(Exception e) {
	             System.out.println("Error Others.");	             
	        }

    }
	
}

Python

ใน ภาษา Python จริง ๆ คือการใช้บล็อค try และ exceptไม่ใช่ catch เหมือนในภาษาอื่น ๆ เช่น Java หรือ C#

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

ตัวอย่าง

การเข้าถึงอินเดกซ์ของลิสต์ที่ไม่มีอยู่จริง

data = [1, 2, 3, 4, 5]
try:
    index = int(input("เลือกตำแหน่งที่ต้องการดึงข้อมูล (0-4): "))
    print(f"ข้อมูลที่ตำแหน่ง {index} คือ {data[index]}")
    except IndexError:
    print("ไม่มีข้อมูลในตำแหน่งที่คุณเลือก")
    except ValueError:
    print("กรุณาใส่ตัวเลขที่เป็นจำนวนเต็ม")

C

ภาษา C ไม่มีฟีเจอร์ try-catch แบบเดียวกับบางภาษา เช่น Java หรือ C# แต่เราสามารถจัดการกับข้อผิดพลาดได้โดยการตรวจสอบค่าที่คืนมาจากฟังก์ชันและใช้กลไกควบคุมภายในโปรแกรม เช่น if-else หรือ switch-case ในการทำงานคล้ายกับ try-catch

ตัวอย่าง

จัดการกับข้อผิดพลาดโดยการตรวจสอบค่า divisor ก่อนการทำการหาร หากเป็นศูนย์ เราจะแสดงข้อความผิดพลาดและออกจากโปรแกรมทันที นี่คือการใช้ if-else ในการจำลอง try-catch

#include <stdio.h>

int main () {
    int dividend = 50;
    int divisor;
    printf("Enter divisor: ");
    scanf("%d", &divisor);

    // Try-Catch Simulation
    if (divisor == 0) {
        // Catch block
        fprintf(stderr, "Error: Division by zero!\n");
        exit(EXIT_FAILURE);
    } else {
        // Try block
        int quotient = dividend / divisor;
        printf("Result of division is %d\n", quotient);
    }
    return 0;
}
C#
Java
Python
C

ใช้catchต่อกัน ไปเรื่อยๆ

ใช้catchต่อกันไปเรื่อยๆ

ใช้บล็อคtry และexcept

ไม่มีฟีเจอร์

try-catch ใช้ if-else หรือ

switch-case

Slide Presentation

Video Presentation

แหล่งอ้างอิง

C#

Java

Python

C

Last updated