Python 기초 - 8.패키지, 예외처리

2 분 소요

패키지

패키지 생성 시 폴더 안에 *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에 연결되어 있는 상태에서 에러가 발생했을 때 커넥션을 끊어주는 역할 가능

사용자 정의 예외

  1. 예외 클래스를 직접 만들 수 있다

    파이썬에 정의되지 않은 예외 클래스를 쓰고 싶을 때 직접 만들어서 사용

    class 예외클래스명(Exception):
    		def __init__(self, msg):  # 생성자, 객체 초기화 함수. 사용할 에러 메시지 할당
    				self.msg = msg
    
  2. 예외 발생 시킴

    파이썬이 인지하지 못하는 예외를 직접 발생시키고 싶을 때 사용

    raise 예외객체명('에러 메시지')
    ) raise TypeError('This is an Error')
    
  3. 함수에서 예외가 발생하면 먼저 그 함수 안에서 예외처리 코드를 찾고, 있으면 그것을 실행. → 없으면 이 함수를 호출한 위치에서 예외처리 구문을 또 찾는다 (stack unrolling) → 있으면 그 예외처리 구문을 실행하고, 없으면 프로그램이 중단됨

클래스

객체지향 프로그래밍

객체를 중심으로 코드를 작성하여 개발이 이루어진다.

객체를 정의하고, 객체와 객체 사이의 관계를 정의하는 방식으로 프로그래밍 한다.

​ ↔ 순차적 프로그래밍: 시간의 흐름 순서대로, 순차적으로 코드가 흘러가는 프로그래밍 구조

​ ↔ 구조적 프로그래밍: 모듈을 중심으로 구분하여 작성되는 프로그래밍 구조

객체

객체(object): 세상을 프로그램으로 모델링 할 때 모델링의 대상이 되는 사람이나 사물. 즉, 샘플. (‘실체’를 객관적으로 바라본 것)

  • ATM예 - ATM을 프로그래밍 하려고 하는 경우…

    1. 입금
    2. 출금
      1. 카드를 넣는다
      2. 카드 비밀번호 입력 → Yes →No
      3. (Yes) 출금액 입력
      4. 카드와 연결된 계좌 정보 추출
    • 위 과정에서 필요한 것들
      • 카드
        • 카드번호
        • 명의자
        • 비밀번호
        • 카드사
        • 연결된 계좌정보
      • 계좌
        • 계좌번호
        • 명의자
        • 비밀번호
        • 은행명
      • 출금 금액: 변수

    이처럼 ATM을 실행시키기 위한 여러 속성들 중에서 ‘카드’, ‘계좌’ 같이 하나로 묶어줄 수 있는 대상이 존재. 이를 객체로 지정하고, 그 안에 속성들을 변수로 지정하여 묶어준다

댓글남기기