예외(Exceptions)

프로그램에서 에러가 발생할 가능성을 방지하여 안정적으로 처리하기 위해 예외를 작성한다.

fruit = ['apple', 'banana', 'strawberry']

try:
    fruit[3]
except:
    print("인덱스를 참조할 수 없습니다.")
# else:
#     print("정상 수행")
finally:
    print("명령 수행")

try에는 예외가 발생 가능성이 있는 코드를 작성하고 except는 에러 상황을 만났을 때, 우회하여 어떤 처리를 해야하는지 설정한다. else는 정상적으로 코드를 수행했을 때 작동하며, finally는 에러가 발생하든 정상적으로 실행되든 작동한다.

 

 

파일 읽기/쓰기

파일 경로를 설정 할 때에는 절대경로와 상대경로가 있다.

절대경로는 컴퓨터의 전체 경로를 말하며(보통 C:\Users\...로 시작한다.) 특수한 경우를 제외하면 일반적으로 작업할 때에는 컴퓨터에 종속되지 않는 상대경로를 쓴다.

f = open('literature\poem.txt', 'r', encoding='UTF-8')

print(f.read()) # 전체
print(f.readline()) # 한 줄
print(f.readlines()) # 전체 줄

f.close()

파일을 읽은 후에는 파일이 유실되지 않도록 close( ) 함수로 닫아주어야한다.

 

with문은 close( ) 함수를 사용하지 않아도 파일을 읽고 자동으로 닫는다.

with open('literature\poem.txt', 'r', encoding='UTF-8') as f:
    print(f.read())

 

쓰기는 a와 w 두 가지 방법이 있다.

f = open('literature\poem.txt', 'a', encoding='UTF-8')
f = open('literature\poem2.txt', 'w', encoding='UTF-8')

f.write("새로운 글이 작성되었습니다.")

f.close()

a는 기존의 내용에 새로 추가하는 것이고, w는 기존의 내용에서 새로운 내용으로 대체하는 것이다. w 모드를 사용할 때에는 기존의 내용이 유실되므로 주의하자.

 

 

'Back-End > Python' 카테고리의 다른 글

객체지향  (0) 2023.08.09
회원가입 프로그램 실습 - 파이썬(Python) 편  (0) 2023.08.08
함수  (0) 2023.08.07
자료구조 - 리스트 / 튜플 / 딕셔너리  (0) 2023.07.27
조건문과 반복문  (0) 2023.07.20
예외(Exceptions)

코드를 실행했을 때 발생되는 에러 중 하나. 예상할 수 있고 자바에서 그 유형을 가지고 있다.

int a = 10;
int b = 0;
int c = a / b;

10은 0으로 나눌 수 없다.

그렇기 때문에 이런 에러가 발생한다.

에러를 처리하지 않으면 프로그램이 종료되거나 예기지 못한 방향으로 흘러갈 수 있다. 컴퓨터 시스템 자체에서 처리될 수 있도록 회피하거나 대체적인 동작, 혹은 에러메세지를 띄울 수 있도록 처리해야한다.

 

리스트를 통한 예외를 만들어보자.

ArrayList arrayList = new ArrayList(initialCapacity:3);
arrayList.get(10);

10이라는 값은 arrayList에 존재하지 않는다. 자료구조에서 범위를 벗어난 것을 참조할 때도 예외가 발생한다.

 

예외를 처리하기 위해서는 try와 catch 구문을 사용한다.

try는 예외가 발생할 것 같은 코드를 try 안에 넣는다. 어떤 예외를 잡아 판단할 것인지, 예외가 발생하면 대체 동작을 수행할 수 있도록 해주는 것이 catch이다.

try {
	arrayList.get(10);
} catch (Exception e) {
	e.printStackTrace();
    System.out.println("Exception 발생");
} finally {
    System.out.println("finally");
}

Exception은 가장 최상위에  e Exception이라는 객체가 있다. 모든 Exception은 여기에 포함된다. 그렇기 때문에 어떠한 에러가 발생하더라도 catch에 걸리게 된다. 그리고 중괄호 안에 메세지를 띄우거나 Sytem.out.println으로 콘솔에 에러발생이라고 띄울 수 있다.(그러나 웬만하면 catch 문 안에 Sytem.out.println을 쓰지 않는 것이 보안에 좋다.) printStackTrace는 에러와 관련된 내용을 띄워 확인 할 수 있다. 에러 메세지는 보안적으로 취약한 점이 드러날 수 있기 때문에 외부에 노출하는 것을 지양하는 것이 좋다.

finally는 위와 상관 없이 무조건 수행되는 소스를 가르킨다.

 

발생하는 에러 종류를 세분화해보자.

try {
    int a = 10;
    int b = 0;
    int c = a / b;
} catch (IndexOutOfBoundsException ioe) {
    System.out.println("IndexOutOfBoundsException 발생");
} catch (IllegalArgumentException iae) {
    System.out.println("IllegalArgumentException 발생");
} catch (Exception e) {
    System.out.println("Exception 발생");
} finally {
    System.out.println("finally");
}

catch는 다중으로 세팅할 수 있다. 예상되는 예외를 나열하고 가장 마지막에 최상위의 Exception 객체를 넣어야 처리되지 않는 예외 없이 모두 처리가 된다.

 

 

'Back-End > Java' 카테고리의 다른 글

HTTP 통신과 URL  (0) 2023.05.23
Web - 클라이언트와 서버  (0) 2023.05.22
객체지향 - 객체지향 프로그래밍  (0) 2023.05.18
회원가입 프로그램 실습 - 자바(Java) 편  (1) 2023.05.16
함수  (0) 2023.05.15

+ Recent posts