SK플래닛 ai활용 데이터엔지니어 과정 2기/파이썬

파이썬 - 모듈화/모듈가져오기/예외처리

dev-lee 2026. 3. 6. 17:01

개요

  • 파이썬 프로그램 구성
    • 모듈
      • *.py
      • 파이썬 파일
        # 실행
        python *.py [인자값1, 인자값2, ...]
      
    • 패키지
      • 폴더/디렉토리
      • 디렉토리 내부에는 여러개의 *.py 혹은 다른 패키지 존재할 수 있음
      • 패키지 내에는 같은 목적을 제공하기 위해 여러 모듈들이 모여있음
      • 특정 기능이 완결되면 전세계 개발자들에게 사용할 수 있게 제공할 수 있음
        • 오픈소스라면 깃에도 공개됨
    • 리소스
      • 모듈이 아닌 파일(환경변수, 이미지, ...)

 

모듈화 / 패키지

  • 필요성
    • 팀작업 -> 작업에 대한 분업 -> 공간/역할 등에 따라 개별적으로 배치(공통 작업이 아니라면)
    • 위 작업이 완료되면 다른 사람들이 만든 모듈을 가져와서 사용해야 함(모듈 가져오기)
  • 실습구조
  /
  L 6.모듈화_모듈가져오기_예외처리.ipynb : 현재 파일
  L a                             : 패키지, 디렉토리
    L b                           : 패키지, 디렉토리
      L __init__.py               : b 패키지를 대변하는 모듈
      L mod.py                    : 일반 모듈
    L __init__.py                 : a 패키지를 대변하는 모듈
 

 

# a > __init__.py
PI1 = 3.14

# a > b > __init__.py
PI2 = 3.144

# a > b > mod.py
# 변수
PI3 = 3.145678

# 함수
def add(x, y):
  return x + y

# 클래스
class A : pass
 

모듈 가져오기

  • from ~ import ~
 from 패키지1.패키지2.패키지3.....모듈 import 변수|함수|클래스|*(모든것)
 from 패키지1.패키지2.패키지3.....패키지 import 변수|함수|클래스|*(모든것)
 from 모듈|패키지 import 변수|함수|클래스|*(모든것)

 # 필요 시 별칭을 모듈 가져온 후 객체의 이름으로 사용
 import ... as 별칭
# from ~ import ~ 유형 사용
#PI3, add, A를 가져와서 사용하시오 > mod.py를 가져와서 사용

# 타인이 만든 세부모듈(변수 등)을 내가 만든 것처럼 사용
from a.b.mod import PI3, add, A

PI3, add(1,2), A()

결과값 : (3.145678, 3, <a.b.mod.A at 0x7cfedd00cd10>)

------------------------------------------------------------------------

# 위와 같은 패턴으로 PI2 사용

from a.b.__init__ import PI2

PI2

결과값 : 3.144

------------------------------------------------------------------------

# a 패키지가 소유한 모든 변수, 함수, 클래스 가져오기

from a import *

PI1

결과값 : 3.14

 

  • import ~
  import 패키지.패키지.패키지.....모듈
  import 패키지.패키지.패키지.....패키지
  import 모듈|패키지

  # 필요 시 별칭을 모듈 가져온 후 객체의 이름으로 사용
  import ... as 별칭
import a.b.mod

# 경로를 모두 작성해서 변수/함수/클래스에 접근해야함 -> 전체 경로에 별칭 부여하면 좋음
a.b.mod.PI3

결과값 : 3.145678

--------------------------------------------------------------------------

# 경로가 길거나 이름이 길다면 별칭 부여하면 좋음
import a.b.mod as m

m.PI3

결과값 : 3.145678

--------------------------------------------------------------------------

# 예시
import pandas as pd
import numpy as np
import tensorflow as tf

--------------------------------------------------------------------------

# PI2는 b아래 __init__.py에 있고, init은 b를 대변하는 파일이기 때문에 a.b만 하면 됨
import a.b as my
my.PI2

결과값 : 3.144
  • __init__.py
    • 특수 목적을 가진 파일, 패키지 하위에 위치해서 해당 패키지를 대변함
    • python 3.3 이하 하위버전 호환때문에 제공되었음

__name__

  • 사용 위치에 따라서 2가지로 해석됨
    • 사전에 정의된 파이썬의 전역 변수
  • 유형 1
    • 직접 특정 모듈을 바로 실행하는 코드에 위치한다면 (엔트리 포인트, 메인코드)
      "__main__"으로 해석됨 혹은 해당값을 가짐
  • 함수 지향적 프로그래밍, 객체 지향적 프로그래밍에서 프로그램을 시작하는 코드에서 주로 사용됨
  # py 파일의 가장 마지막 라인에 위치함
  if __name__ == '__main__':
    main() # 프로그램 시작 함수(사용자 정의했다면)
  •   게임 예시
  •   if __name__ == '__main__':
        stage1()
        stage2()
        stage3()
        stage4()
        stage5()
        stage6()
        stage7()
    
  • 유형 2
    • 남이 만든 코드에서 사용한다면 그리고 이 코드를 내가 가져와서 (엔트리 포인트) 모듈을 사용한다면
      "파일명"으로 해석됨
    
    -> 내가 쓰면 __main__, 남이 쓰면 파일명

예외처리

  • 개념
    • 프로그램은 셧다운 X
    • 잠재된 오류 상황에 처리 필요
      • 꼼꼼하게 시나리오 검토하여 처리(방지)
        • 조건문이 많이 보임(사용됨)
        • LBYL : Look Before You Leep
          • 예외가 나올만한 상황을 꼼꼼하게 체크하여 코드를 구성
      • 진행 > 오류발생 > 수습
        • 코드를 계속 진행. 수습은 나중에 진행(개발 단계)
        • EAFP : Easier to Ask Forgiveness than Permission
          • 파이썬의 권장 스타일 : 코드가 간결해짐 -> 회사 문화를 따름
          • 예외처리
            • 오류를 책임지고 잡아서 처리
              try ~ except ~ else ~ finally ~
              try ~ except ~ finally ~
              try ~ except ~
              try ~ except ~ else ~
            
          • 오류 던지기 (상위(나를 호출한 상위 레벨)
            • 한곳에서 일괄 처리해라
              raise ~
            

 

  • 문법
    • 예외 처리문
    try:
      #예외 상황이 발생할만한 코드 ex) I/O 상황
    
      except 오류객체명1:
        # 오류가 발생하면 자동 진입됨
        # 로깅, 기타 처리
    
      except [오류객체명2]: # 생략 가능
      
      .
      .
      .
      [else]: #  생략 가능
        # 오류가 발생하지 않았을 때 진입됨
    
      [finally]: # 생략 가능
        # 뒷정리 코드(필요 시 사용)
        # 오류 발생 여부와 상관없이 무조건 처리해야 하는 코드
        # try문을 빠져나갈 때 반드시 실행
    

 

try:
  print(1)
  pass
except Exception as e:
  print('예외 발생', e)
  pass
else:
  print('정상')
  pass
finally:
  print('뒷정리')
  pass
  
결과값 : 
1
정상
뒷정리
try:
  print(1)
  print(2, 1/0) # 오류 상황
  print(3)
  pass
except Exception as e:
  print('예외 발생', e)
  pass
else:
  print('정상')
  pass
finally:
  print('뒷정리')
  pass
  
결과값 : 
1
예외 발생 division by zero
뒷정리
#오류 던지기 -> 웹 상에서 많은 페이지에서 오류가 발생하면 던지기 처리하여 한 곳에서 일괄 처리할 수 있도록 함(벡엔드)
def exception_call():
  # 오류 발생 -> 잡힘 -> 오류 내용 던지기 (처리는 x, 밖으로 넘겨버림)
  try:
    1/0
  except Exception as e:
    raise e

# 실제 오류 처리 파트
try :
  exception_call()
except Exception as e:
  print('오류 처리-로깅', e)
  
결과값 : 오류 처리-로깅 division by zero

 

'SK플래닛 ai활용 데이터엔지니어 과정 2기 > 파이썬' 카테고리의 다른 글

파이썬 - 데이터 분석의 기초  (0) 2026.03.12
파이썬 - 데이터분석  (0) 2026.03.09
파이썬-함수(2)  (0) 2026.03.06
파이썬-함수  (1) 2026.03.05
파이썬 - 흐름제어(3)  (0) 2026.03.05