본문 바로가기
etc.

[Java/Python] 문법 비교 정리 #8 예외 처리

by Lee David 2022. 11. 10.
반응형

Java에서의 예외처리

String[] arr = new String[5];
int a = 9;

try {
    // 1. 예외 던지기
    if(a < 10) throw Exception("10 보다 큰 값이 필요 합니다.");
    
    // 2. 예상치 못한 Exception이 발생
    String param = arr[a];
} catch(Exception e) {
    // e에 대한 로깅 및 예외 처리 구현
} finally {
    System.out.println("try or catch 구문의 종료 지점");
}

예시에서 보게 되면 a 보다 작은 값을 가진 변수가 try 구문에서 분기 처리를 하여 10 보다 작은 경우 catch 구문으로 바로 이동하게 되는 경우와 예상치 못한 예외가 발생 할 수 있는 로직에서 try catch 문을 사용하면 프로세스/스레드/세션 등을 유지 할 수 있고 혹은 예외에 대한 분기문을 대신하여 사용하기도 합니다.

finally 영역은 필수는 아니지만 try 혹은 catch 구문이 종료되고 나면 반드시 통과해야 하는 영역으로 지정할 수 있습니다.


Python에서의 예외처리

출처 : https://files.realpython.com/media/try_except_else_finally.a7fac6c36c55.png

a = -1
b = '2'

try:
    if a < 0:
        raise ValueError('a는 음수/0이 될수 없습니다.')
    print(a + b)
except ValueError as ve:
    print(f'Exception : {ve}') # ValueError 발생시 실행되는 구문
except:
    print('Error') # raise 하지 않은 예외에 대하여 실행되는 구문
else:
    print('Normal') # try 구문이 정상 동작 이후에 실행되는 구문
finally:
    print('End') # 무조건 실행되는 구문

python에서는 java와 다른점 입니다.

  1. else 영역을 정의 할 수 있다. (except와 finally 영역 사이에 정의 해야 함)
  2. try 이후에 except 혹은 finally 영역만 선언하여 예외처리를 종료 시킬 수 있다.
a = -1
b = 2

# 1. else 영역을 정의 할 수 있다. (except와 finally 영역 사이에 정의 해야 함)
try:
    print(a + b)
except:
    print('Error')
else:
    print('Normal')
finally:
    print('End')

print('--------------------------------')

# 2. try 이후에 except 혹은 finally 영역만 선언하여 예외처리를 종료 시킬 수 있다.
try:
    print(a + b)
finally:
    print('End')

첫번째 예제의 주석 설명에 이어서 except는 예외에 대한 처리를 혹은 else는 정상 동작에 대한 처리가 종료 된 이후에 finally가 실행됩니다.

try에 finally만 선언한 경우는 코드가 짧아지고 finally를 무조건 실행하는 이점이 있지만 단점으로 try 안에서 예외 발생시 finally 실행 이후 Exception이 발생하게 됩니다.

또한 모듈에서 try의 return을 주더라도 finally에 return을 하는 구문이 있다면 finally의 값이 return 되게 됩니다.

def test():
    try:
        return 1
    finally:
        return 2

print(test()) # finally의 2가 출력 됩니다.

java와 비슷하지만 다른 예외 처리에 대한 차이점에 대하여 알아 보았습니다.

반응형