-
6일차 - 파일 처리와 예외 처리AI 솔루션 개발자과정(Java, Python) 2022. 10. 18. 15:26
파일 처리.
파일은 크게 '텍스트 파일'과 '바이너리 파일'로 나뉜다.
- 텍스트 파일 : 텍스트로 구성된 파일
- 바이너리 파일 : 이진코드로 구성되는 미디어 파일(이미지, 동영상, 기타)
파일을 처리하려면 '파일 열기'를 해야 한다. 파일을 열면 '파일 읽기' 또는 '파일 쓰기'를 할 수 있다.
파일 객체 = open(문자열 : 파일 경로, 문자열: 파일의 모드) 구문으로 파일을 열 수 있다.
파일의 모드는 3가지가 있다. "w"는 새로 쓰기 모드. "a"는 이어 쓰기 모드. "r"은 읽기 모드.
open()함수로 파일을 열면 반드시 close()함수로 닫아야 한다. 파일을 닫지 않으면 추후 오류가 생기기 때문이다.
조건문과 반복문이 코드에 들어가다 보면 파일을 열고 닫지 않는 실수를 하는 경우가 생긴다.
이를 방지하기 위해 with 키워드라는 기능이 있다.
with 키워드.
with키워드는 구문이 종료될 때 자동으로 파일이 닫힌다.
스트림 : 파일과 파일 사이를 연결해 데이터가 이동할 수 있도록 해주는 다리이다.
텍스트 읽기.
파일에 텍스트를 쓸 때는 write()함수를 사용하고, 반대로 파일을 읽을 때는 read()함수를 사용한다.
read()함수를 호출하면 내부에 있는 데이터를 모두 읽어 출력한다.
read()함수는 출력기능이 없어서 따로 출력을 해주어야 한다.
제너레이터
제너레이터는 파이썬의 특수한 문법 구조이다. 제너레이터는 이터레이터를 직접 만들 때 사용하는 코드이다.
함수 내부에 yield 키워드를 사용하면 해당 함수는 제너레이터 함수가 되며, 일반 함수와 달리 함수를 호출해도 함수 내부의 코드가 실행되지 않는다.(바이너리 데이터이기 때문이다.)
예외 처리
구문 오류와 예외
- 오류 : 프로그램 실행 전에 발생하는 구문의 문제
- 예외 : 런타임 오류. 프로그램 실행 중에 발생하는 논리의 문제
구문 오류는 해결하지 않으면 프로그램 자체가 실행되지 않기 때문에 코드를 제대로 수정해야 한다.
예외를 해결하는 방법은 오류 해결방법처럼 코드를 제대로 작성하는 것도 있지만,
예외 처리를 통해 해결할 수 있다.
기본 예외 처리
예외 처리는 두가지로 나뉜다.
-
- 조건문을 사용하는 방법
- try 구문을 사용하는 방법
조건문 if를 통해 예외 처리를 할 때는 예외가 언제 발생하는지와 관련된 조건을 예측하고 있어야 한다.
하지만 예외가 발생할 상황을 예측하고 모두 조건문으로 처리하는 것은 매우 힘들고 프로그래밍 언어의 구조적인 문제로 인해 조건문만으로 예외를 처리할 수 없는 경우도 있다.
그래서 요즘 프로그래밍 언어에서는 예외를 처리할 수 있는 구문인 try except 구문이 있다.
try except 구문의 기본적인 구조는 다음과 같다.
어떤 상황에 예외가 발생하는지 완벽하게 이해하고 있지 않아도 프로그램이 강제로 죽어 버리는 상황을 막을 수 있다.
pass 키워드 : 예외가 발생하면 일단 처리해야 하지만, 해당 코드가 중요한 부분이 아니라면 일단 프로그램이 강제 종료되는 것을 막기위해 except 구문에 pass 키워드를 사용한다.
try except else 구문
-
- try except 구문 뒤에 else구문을 붙여서 '예외가 발생하지 않았을 때 실행할 코드'를 지정할 수 있다.
finally 구문
-
- finally 구문은 예외 처리 구문에서 가장 마지막에 사용할 수 있는 구문이다.
- 예외가 발생하든 발생하지 않든 무조건 실행할 때 사용하는 코드이다.
- try 구문에서 return 키워드를 사용할 때, 반복문에서 break 키워드로 빠져나갈 때도 마찬가지로 무조건 실행된다
파일을 열고 있으면 해당 파일을 이동하거나 덮어 씌우거나 하는 것이 불가능해진다.
따라서 프로그램에서 파일을 열었으면 무조건 닫아야 한다. 파일을 제대로 닫았는지는 file 객체의 close 속성으로 알 수 있다.
항상 켜져있는 프로그램을 데몬 또는 서비스 라고 하는데, 파일의 변경을 감지하는 프로그램이나 사용자에게 웹 페이지를 제공하는 웹 서버 등이 모두 데몬이자 서비스이다.
파일을 닫을 때는 close() 함수를 사용하지만 중간 과정에서 예외가 발생한다면 try 구문 중간에 죽어 버리면서 파일이 제대로 닫히지 않는 문제가 발생한다. 따라서 반드시 finally 구문을 사용하여 파일을 닫게 해야 한다.
try, except,else, finally 구문의 조합.
-
- try 구문은 단독으로 사용할 수 없으며, 반드시 except 구문 또는 finally 구문과 함께 사용해야 한다.
- else 구문은 반드시 except 구문 뒤에 사용해야 한다.
이를 조합해 보면 다음 조합이 있다.
-
- try + except 구문
- try + except + else 구문
- try + except + finally 구문
- try + except + else + finally 구문
- try + finally 구문
try + else 구문 조합을 사용하면 구문 오류가 발생한다. 구문 오류가 발생하면 코드가 아예 실행되지도 않는다.
예외 객체
현실에서 어떤 사건이 발생하면 '누가, 언제, 어디서'등의 정보가 생긴다. 프로그래밍 언어도 예외가 발생하면 예외와 관련된 정보가 생긴다. 이러한 예외 정보는 예외 객체(exception object)에 저장된다.
예외 객체를 사용하면 except 구문의 if 조건문처럼 사용해서 예외를 구분할 수 있다.
예외 구분하기.
각각의 상황에 예외를 구분하여 처리할 수 있다.
NameError, TypeError, ValueError, IndexError 등 다양한 예외가 있고, 마지막 구문에 모든 예외의 부모 라고 할 수 있는 'Exception'을 넣어서 프로그램이 죽지 않게 하는 것이 좋다.
raise 구문
아직 구현되지 않은 부분에 일부러 예외 발생시켜서 프로그램을 죽게 만들어 잊어버리지 않도록 하는 것이다.
raise 뒤에 예외 이름을 입력해 주면 된다.
'AI 솔루션 개발자과정(Java, Python)' 카테고리의 다른 글
8일차 - 클래스 (0) 2022.10.19 7일차 - 모듈 (0) 2022.10.18 5일차 - 함수와 람다 (2) 2022.10.14 4일차 딕셔너리와 반복문 (0) 2022.10.13 3일차 - 불 자료형과 if 조건문 (0) 2022.10.13