이번에는 모듈과, 패키지, 예외 처리와 함수를 이용하는 방법에 대해서 진행하려고 합니다.

모듈

모듈은 쉽게 말해서 하나의 파이썬 파일(*.py)입니다. 여러 기능들을 하나에 모듈에 넣어놓고 import를 이용하여 해당 모듈을 호출하여 사용 하는식으로 사용할 수 있습니다.

사용방법은 아래와 같이 모듈명import하고 모듈명.함수명()로 이용할 수 있습니다.

import 모듈명

모듈명.함수명()

또는 from 모듈명 import 함수 과 같이 호출하여 모듈명 없이 함수명만 사용할 수 도 있습니다.

from 모듈명 import 함수명
from 모듈명 import * # 모듈명에 있는 모든 함수를 사용하겠다는 의미  

함수명()

예제

class Calculator:

    value1 = 0
    value2 = 0

    def setData(self, value1, value2):
        self.value1 = value1
        self.value2 = value2

    def plus(self):
        return self.value1 + self.value2

    def minus(self):
        return self.value1 - self.value2

    def multiply(self):
        return self.value1 * self.value2

    def divide(self):

        if self.value2 == 0:
            return "Do not use 0"

        return self.value1 / self.value2

실행

# coding=utf-8
from Calculator import Calculator

cal = Calculator()

while(True):
    print "--------------"
    print "1. Input Data"
    print "2. Plus"
    print "3. Minus"
    print "4. Multiply"
    print "5. Divide"
    inputData = input("Select Menu : ")

    if inputData == 1:
        value1 = input("input value1 : ")
        value2 = input("input value2 : ")
        cal.setData(value1, value2)
        continue
    elif inputData == 2:
        print "\n--------------\n"
        print "result : %d" % cal.plus()
        print "\n--------------\n"
        continue
    elif inputData == 3:
        print "\n--------------\n"
        print "result : %d" % cal.minus()
        print "\n--------------\n"
        continue
    elif inputData == 4:
        print "\n--------------\n"
        print "result : %d" % cal.multiply()
        print "\n--------------\n"
        continue
    elif inputData == 5:
        print "\n--------------\n"
        print "result : %d" % cal.divide()
        print "\n--------------\n"
        continue
    else:
        print "\n--------------\n"
        print "Wrong number"
        print "\n--------------\n"


패키지

패키지는 모듈의 집합이라고 생각하면 편합니다.

디렉토리 구조로 여러가지 모듈을 모아 놓고 사용할 수 있습니다.

예를 들어서 아래와 같은 구조의 패키지가 있을때,

network/__init__.py
network/connect/__init__.py
network/connect/get.py
network/connect/post.py
network/disconnect/__init__.py
network/disconnect/disconnect.py

파이썬 코드에서는 다음과 같이 사용할 수 있습니다.

import network.connect.get

network.connect.get()

이거나, 앞에 부분을 안써주기 위해서

import network.connect import get

get()

init.py의 역할

위의 예시로 준 구조를 보면 패키지 안에 __init__.py가 있습니다.

해당 파일은 해당 디렉토리가 패키지임을 알려주고, __init__.py가 있어야지만 패키지로 인식합니다. (**python3.3 부터는 __init__.py가 없어도 되지만, 하위 호환을 위해 사용하는게 좋습니다.)


예외처리

보통 프로그램 언어는 잘못된 코드로 인해서 버그가 발생을 하게 되면, 멈추거나, 죽어 버리는데, 예외처리를 하게 되면 버그를 만났을때, 멈추거나 죽지않고, 별도의 로직을 타게 할 수 있습니다.

사용방법

아래가 가장 기본 형태


try:
    동작 코드
except 발생 에러A:
    동작 코드  에러A가 발생할때 들어옵니다
except:
    발생 에러A 이외의 모든 에러일때는 이리로 들어옵니다
finally:
    정상으로 처리되던 에러가 발생하던 마지막에는 여기를 타게 됩니다

에러가 나지 않았을때 처리하는게 있는 경우

try:
    동작 코드
except:
    에러가 발생하면 이리로 들어옵니다
else:
    에러가 발생하지 않았으면 이리로 들어옵니다

실습 (정상일때)

# coding=utf-8
try:
    a = 12
    print 144 / a
except ZeroDivisionError:
    print "0으로 나누었음"
finally:
    print "무조건 실행 되는 부분"

결과

12
무조건 실행 되는 부분

실습2 (에러발생)

# coding=utf-8
try:
    a = 0
    print 144 / a
except ZeroDivisionError:
    print "0으로 나누었음"
finally:
    print "무조건 실행 되는 부분"

결과

0으로 나누었음
무조건 실행 되는 부분

에러 회피하기

만약 에러가 났을때 아무것도 하지 않고 넘어가기 위해서는 pass를 써줍니다.

# coding=utf-8
try:
    a = 0
    print 144 / a
except:
    pass

에러 일부러 발생 시키기

에러를 일부러 발생시켜야 하는 경우가 가끔 있는데, 예를 들어서, 예외 처리가 잘 동작하는지 확인을 위해서 강제로 예외를 발생 시키는 경우가 있습니다.

에러를 일부러 발생시키기 위해서는 raise라는 명렁어와 발생할 에러를 같이 입력해줍니다

raise FileNotFoundError

실습

# coding=utf-8
try:
    raise ZeroDivisionError
except :
    print "에러 발생"

결과

에러 발생

PIP를 이용한 파이썬 패키지 설치

pip는 파이썬으로 작성된 패키지 소프트웨어를 설치 및 관리하는 패키지 관리 시스템 입니다, 기본적으로 파이썬을 설치하면 같이 설치가 됩니다.

만약 설치가 되어 있지 않으면 아래 명령어로 설치를 해줍니다.

$ curl https://bootstrap.pypa.io/get-pip.py | python

기본적인 사용법

새로운 패키지 설치

$ pip install 패키지명

예제

$ pip install django
$ pip install numpy
$ pip install flask
$ pip install matplotlib

설치된 패키지 삭제

$ pip uninstall 패키지명

예제

$ pip uninstall django
$ pip uninstall numpy
$ pip uninstall flask
$ pip uninstall matplotlib

설치된 패키지 리스트 보기

$ pip list

결과


특정 패키지 정보 보기

$ pip show 패키지명

예제 및 결과