본문 바로가기
PROGRAMMING/PYTHON

[Python] 모듈, 패키지, 예외처리, 내장함수

by 안녕나는현서 2021. 4. 26.
728x90

- 모듈(라이브러리)

  • 파이썬 함수 혹은 변수 또는 클래스의 코드를 모아놓은 파일
  • 확장자 : .py

 

- 분석에 특화된 라이브러리

  • Numpy : 고성능 과학계산을 위한 데이터 분석 라이브러리
  • Pandas : 행과 열로 구성된 표 형식의 데이터를 지원하는 라이브러리
  • Matplotlib : 기본적인 시각화가 가능한 라이브러리
  • Seaborn : 다양한 기능으로 시각화가 가능한 라이브러리

 

- 모듈 만들기

  • 모듈에 넣고 싶은 변수, 함수, 클래스 등을 코딩하고 .py로 저장

 

- 모듈 불러오기

  • 모듈을 저장한 디렉토리로 이동
  • !dir : 현재 있는 디렉토리에 있는 파일 목록 반환(모듈이 있는 디렉토리인지 확인가능)
  • import 모듈이름
  • 모듈.변수이름 : 모듈에 있는 변수 출력
  • 모듈.함수(클래스)이름() : 모듈에 있는 함수나 클래스 사용
  • from 모듈이름 import 모듈함수 : 함수 사용 시 '모듈.'을 생략하고 함수이름()으로 사용 가능 (from 모듈이름 import * : 모듈의 모든 함수 불러옴)
import my_module

my_module.say()

 

- 패키지(package)

  • 도트(.)를 사용하여 파이썬 모듈을 계층적(디렉토리 구조)으로 관리할 수 있게 해줌
  • 모듈이름이 A.B인 경우, A는 패키지 이름 B는 A패키지의 B모듈

 

- 자주 발생하는 오류

  • FileNotFoundError : 없는 파일을 열려고 시도할 때
  • ZeroDivisionError : 0으로 다른 숫자를 나누는 경우
  • IndexError : 리스트에서 없는 값을 출력 시도할 경우

 

- 오류 예외 처리 기법 : try-except문

  • try블록에서 오류가 발생하면 except블록 수행
  • 오류가 발생하지 않으면 except블록은 수행되지 않음
# try :
#     ...
# except[발생오류[as 오류 메세지 변수]] :
#     ...
# []안의 내용은 생략 가능

try :
    4/0
except ZeroDivisionError as e :
    print(e)
    
4/0

 

# 여러개의 오류 처리

try :
    a = [1,2]
    print(a[3])
    4/0
except ZeroDivisionError :
    print('0으로 나눌 수 없습니다.')
except IndexError :
    print('인덱싱할 수 없습니다.')

 

- 오류 예외 처리 기법 : try-finally문

  • try블록 수행 도중 예외 발생 여부와 상관없이 finally블록 수행
    사용한 리소스를 close해야 할 때 많이 사용
f = open('new.txt', 'w')

try : 
    f.write('안녕하세요')
finally :
    f.close()

 

 

- 오류 회피하기 : 특정 오류 발생 시 그냥 통과

try :
    f = open('없는 파일', 'r')
except FileNotFoundError :
    pass

 

 

- 오류 일부러 발생시키기

# Bird라는 클래스를 상속받는 자식 클래스는 반드시 fly라는 함수를 구현하도록 만들고 싶은 경우

class Bird :
    def fly(self) :
        raise NotImplementedError
# raise을 이용하여 오류를 발생시키도록 설정
# 만약 자식 클래스가 fly함수를 구현하지 않은 상태로 호출한다면?

class Eagle(Bird) :
    pass

eagle = Eagle()
eagle.fly()

# 오류를 발생시키지 않으려면

class Eagle(Bird) :
    def fly(self) :
        print('very fast')

eagle = Eagle()
eagle.fly()

 

- 예외 만들기

  • 파이썬의 내장 클래스인 Exception을 상속하여 만들 수 있음
class MyError(Exception) :
    pass
def say_nick(nick) :
    if nick == '바보' :
        raise MyError()
    print(nick)
say_nick('천사')
say_nick('바보')

try :
    say_nick('천사')
    say_nick('바보')
except MyError :
    print('허용되지 않는 별명입니다.')

 

 

- 내장함수

  • 외부 모듈과 달리 import없이 바로 사용 가능
# abs : 절댓값

print(abs(3))
print(abs(-3))

# all : 반복 가능한 자료형을 입력 인수로 받으며 모든 인수가 참이면 True 반환

print(all([1,2,3]))
print(all([1,2,3,0]))
# -> 숫자형 자료형은 0이 거짓, 나머지는 참

# any : 입력 인수 중 하나라도 참이 있으면 True, 모두 거짓이면 False 반환

print(any([1,2,3,0]))
print(any([0,0,0]))

# chr : 아스키코드 값을 입력받아 문자열으로 출력

print(chr(97))
print(chr(48))

# 아스키 코드 : 0에서 127사이의 숫자를 각각 하나의 문자 또는 기호에 대응시켜 놓은 것

# dir : 객체가 자체적으로 가지고 있는 변수나 함수 보여줌

print(dir([1,2,3])) # -> 리스트 관련 함수 반환
print('')
print(dir({'1':'a'})) # -> 딕셔너리 관련 함수 반환

# divmod(a,b) : 2개의 숫자를 입력받고 a를 b로 나눈 몫과 나머지 튜플형태로 반환

divmod(7,3)

# enumerate : 순서가 있는 자료형(리스트, 튜플, 문자열)을 인덱스 값을 포함하는 enumerate 객체로 반환
# for문처럼 반복되는 구간에서 객체가 어느 위치에 있는지 알려주는 인덱스 값이 필요할 때 유용

for i, name in enumerate(['body', 'foo', 'bar']) :
    print(i, name)

# eval : 실행 가능한 문자열을 입력받아 실행한 결과값 반환
# 입력받은 문자열로 함수나 클래스를 동적으로 실행하고 싶을 때 사용

print(eval('1+2'))
print(eval("'hi' + 'a'"))

# filter : (함수이름, 함수에 차례로 들어갈 반복 가능한 자료형)을 입력받아서
# 자료형의 요소가 함수에 입력되었을 때, 값이 참인것만 묶어서 반환

def positive(l) :
    result = []
    for i in l :
        if i > 0 :
            result.append(i)
    return result

print(positive([1, -3, 2, 0, -5, 6]))
print('')

def positive(x) :
    return x > 0

print(list(filter(positive, [1, -3, 2, 0, -5, 6])))

# hex : 정수 값을 입력받아 16진수로 변환하여 반환

hex(234)

# id : 객체를 입력받아 고유 주소 값(레퍼런스)를 반환

a=3
print(id(3))
print(id(a))

# input : 사용자 입력을 받음

input('입력 : ')

# int : 자료형을 정수형으로 변환

print(int('3'))
print(int(3.4))
print('')

# int(x,radix) : radix진수로 표현된 문자열 x를 10진수로 변환

print(int('11', 2))
print(int('1A', 16))

# isinstance : (인스턴스, 클래스) 입력받은 인스턴스가 입력된 클래스의 인스턴스이면 True

class Person : pass

a = Person()
isinstance(a, Person)

# len : 입력값의 길이 출력

len('python')

# list : 반복 가능한 자료형을 입력받아 리스트로 출력

print(list('python'))

a = [1, 2, 3]
b = list(a)
print(b)

# map : (함수, 반복가능한 자료형)을 입력 받아, 자료형의 각 요소를 함수가 수행한 결과 반환

def two_times(numberList) :
    result = []
    for number in numberList :
        result.append(number*2)
    return result

result = two_times([1,2,3,4])
print(result)

# -> 위의 예제를 map함수를 이용해서 표현하면

def two_times(x) : return x*2

list(map(two_times, [1,2,3,4]))

# max : 반복가능한 자료형 입력받아서 최댓값 반환

max([1, 2, 3])

# min : 반복가능한 자료형 입력받아서 최솟값 반환

min([1, 2, 3])

# oct : 정수 형태의 데이터를 8진수 문자열로 반환

oct(34)

# open(filename, [mode]) : 파일 객체 반환

f = open('file.txt', 'r')
# ord : 문자의 아스키 코드 값 반환

ord('a')

# pow(x, y) : x의 y 제곱값 반환

pow(2,3)

# range(start, end, step) : start <= x < end에 속하는 x값 반환

list(range(1, 11, 2))

# round(숫자, 소수점 자리수) : 반올림

print(4.6)
print(round(5.678, 2))

# sorted : 입력값을 정렬한 후 리스트로 반환

sorted([3, 2, 1])

# str : 객체는 문자열 형태로 변환하여 반환

str(3)

# sum : 입력받은 리스트나 튜플의 모든 요소의 합 반환

sum([1, 2, 3])

# tuple : 반복가능한 자료형을 입력받아 튜플 생성

tuple('abc')

# type : 입력값의 자료형 반환

print(type('abc'))
print(type(3))

# zip : 동일한 개수로 이루어진 자료형을 묶어줌

list(zip([1, 2, 3], [4, 5, 6]))

 

- 정규표현식

  • \d : 숫자와 매치, [0-9]
  • \D : 숫자가 아닌 것과 매치, [^0-9]
  • \s : whitespace문자(space나 tab처럼 공백을 표현하는 문자) [\t\n\r\f\v]
  • \S : whitespace문자가 아닌 것과 매치 [^\t\n\r\f\v]
  • \w : 문자+숫자와 매치 [a-zA-Z0-9_]
  • \W : 문자+숫자가 아닌 문자와 매치 [^a-zA-Z0-9_]
728x90

'PROGRAMMING > PYTHON' 카테고리의 다른 글

[Python] Pandas  (0) 2021.04.26
[Python] Numpy  (0) 2021.04.26
[Python] 클래스  (0) 2021.04.26
[Python] 파일  (0) 2021.04.26
[Python] 함수  (0) 2021.04.25

댓글