Python 기초 - 8.패키지, 예외처리
패키지
패키지 생성 시 폴더 안에 *init*.py 파일이 있어야 한다.
- 파이썬 파일들의 목록을 정의
- 패키지에 파일을 추가할 때마다 init.py 안에 리스팅을 해줘야 함
함수들의 모음을 파일에 작성
다른 파일에서 함수를 사용하려면 import 작업 필요
예외처리
예외
런타임시에 발생하는 문제
↔ 컴파일시의 에러 = 문법적 에러
예외발생
예외가 발생하면 파이썬이 예외 객체를 생성해서 제공해준다
예) 3 / 0 → ZeroDivisionError: division by zero (예외명: 예외 메시지(예외값))
int('aaa') → ValueError: invalid literal for int() with base 10: 'aaa'
list = [1, 2, 3], list[4] → IndexError: list index out of range
예외처리
목적: 예외가 발생하여 프로그램이 예외객체를 맞았을 때 에러가 발생하고 프로그램이 중단되는 것을 방지하기 위함
try - except 문
try:
예외 발생이 가능한 실행문
except 예외명:
예외명에 해당되는 예외 발생시의 예외처리
except 예외명 as 변수:
예외 메시지를 변수에 담고 예외처리
except Exception:
예외 상황을 잘 모를 경우 확인가능
except:
Exception으로도 처리 못한 예외를 처리. except문들 중 가장 마지막 순서로 와야함
else:
예외가 발생하지 않았을 경우의 실행문
finally:
예외 발생 유무와 상관없이 마지막에 항상 실행될 실행문
예)
try:
s = 3 / 0
except ZeroDivisionError:
print('0으로 나눌 수 없음')
-
elif 처럼 except는 반복해서 여러개를 붙일 수 있음
-
예외명을 지정해놓으면 해당 되지 않는 에러는 예외처리 시키지 않음
-
except Exception:
- 모든 예외 객체를 받는 구문 (모든 예외객체는 Exception 클래스로 포함된다)
try: 예외 발생 가능한 코드 except Exception as e: print(e)
- 위처럼 코드를 작성하면 어떤 예외가 발생할지 모르는 상황에서 예외가 발생했을 때 어떤 에러가 발생한 것인지 파악이 가능하다
-
except: 예외명을 지정해주지 않으면 모든 에러를 예외처리 시킴.
- 만약 다른 except 조건들이 있다면 가장 하위에 위치시켜야 함
- Exception 으로도 못 잡았을 경우 대비 사용
-
try문 안에서 예외처리가 되고 나면 break를 만난 것 처럼 그 뒤의 코드는 실행되지 않음
-
if - except - else : if문과 마찬가지로 else를 사용하여 예외가 발생하지 않은 경우의 코드도 실행 가능.
-
finally
-
에러가 발생해도 반드시 실행해야되는 동작이 있을 경우
예1) 파일을 읽고 있던 중 에러가 발생하여 파일을 닫지 않는 경우 방지
예2) DB에 연결되어 있는 상태에서 에러가 발생했을 때 커넥션을 끊어주는 역할 가능
-
사용자 정의 예외
-
예외 클래스를 직접 만들 수 있다
파이썬에 정의되지 않은 예외 클래스를 쓰고 싶을 때 직접 만들어서 사용
class 예외클래스명(Exception): def __init__(self, msg): # 생성자, 객체 초기화 함수. 사용할 에러 메시지 할당 self.msg = msg
-
예외 발생 시킴
파이썬이 인지하지 못하는 예외를 직접 발생시키고 싶을 때 사용
raise 예외객체명('에러 메시지') 예) raise TypeError('This is an Error')
-
함수에서 예외가 발생하면 먼저 그 함수 안에서 예외처리 코드를 찾고, 있으면 그것을 실행. → 없으면 이 함수를 호출한 위치에서 예외처리 구문을 또 찾는다 (stack unrolling) → 있으면 그 예외처리 구문을 실행하고, 없으면 프로그램이 중단됨
클래스
객체지향 프로그래밍
객체를 중심으로 코드를 작성하여 개발이 이루어진다.
객체를 정의하고, 객체와 객체 사이의 관계를 정의하는 방식으로 프로그래밍 한다.
↔ 순차적 프로그래밍: 시간의 흐름 순서대로, 순차적으로 코드가 흘러가는 프로그래밍 구조
↔ 구조적 프로그래밍: 모듈을 중심으로 구분하여 작성되는 프로그래밍 구조
객체
객체(object): 세상을 프로그램으로 모델링 할 때 모델링의 대상이 되는 사람이나 사물. 즉, 샘플. (‘실체’를 객관적으로 바라본 것)
-
ATM예 - ATM을 프로그래밍 하려고 하는 경우…
- 입금
- 출금
- 카드를 넣는다
- 카드 비밀번호 입력 → Yes →No
- (Yes) 출금액 입력
- 카드와 연결된 계좌 정보 추출
- …
- 위 과정에서 필요한 것들
- 카드
- 카드번호
- 명의자
- 비밀번호
- 카드사
- 연결된 계좌정보
- 계좌
- 계좌번호
- 명의자
- 비밀번호
- 은행명
- 출금 금액: 변수
- 카드
이처럼 ATM을 실행시키기 위한 여러 속성들 중에서 ‘카드’, ‘계좌’ 같이 하나로 묶어줄 수 있는 대상이 존재. 이를 객체로 지정하고, 그 안에 속성들을 변수로 지정하여 묶어준다
댓글남기기