[Python 독학] 예외처리, 내장함수, 라이브러리(외장함수)

2021. 11. 25. 10:53Python

예외처리

: 오류가 발생했을 때 어떻게 할지 정하는 것으로

파이썬은 오류를 무시하고 싶을 때 try, except를 사용하여

예외적으로 오류를 처리할 수 있도록 해준다.

 

흔한 오류의 종류

FileNotFoundError : 없는 파일을 열려고 할 때

ZeroDivisionError : 0으로 나누려할 때

IndexError : 리스트에서 얻을 없는 값(인덱스)을 부를 때

 

오류 예외 처리 기법

try, except문

기본 구조는 다음과 같다.

try:
    …
except [발생오류[as 오류 메세지 변수]]:
    …

try 블록 수행 중 로류가 발생하면

except 블록이 수행되고,

try 블록에서 오류가 발생하지 않는다면

except 블록은 수행되지 않는다.

except [발생오류[as 오류 메세지 변수]]:

except 구문에서 [ ] 기호는 괄호 안의 내용을

생략할 수 있다는 관례 표기법이라 다음과

같이 3가지 방법으로 사용이 가능하다.

# 1 try, except만 쓰는 방법
try:
    …
except:
    …


# 2 발생 오류만 포함한 except문
try:
    …
except 발생오류:
    …


# 3 발생 오류와 오류 메세지 변수까지 포함한 excpet문
try:
    …
except 발생오류 as 오류 메세지 변수:
    …

예시 1 _

try:
    4 / 0
except ZeroDivisionError as e:
    print(e)
    
>>> division by zero

예시 2 _오류가 나지 않을 경우 else 실행

try:
    f = open('none', 'r')
except FileNotFoundError as e:
    print(str(e))
else:
    data = f.read()
    print(data)
    f.close

 

try … finally

finally절은 try문 수행 도중 예외 발생 여부에

상관없이 항상 수행된다. 보통 finally절은 사용한

리소스를 close해야 할 때 많이 사용된다.

f = open('foo.txt' , 'w')
try:
    # 무언가를 수행한다.
finally:
    f.close()

이와 같이 foo.txt 파일을 쓰기 모드로 연 후

try문을 수행하고 예외 발생 여부에

상관없이 finally절에서 f.close()로

열린 파일을 닫을 수 있다.

 

여러 개의 오류 처리하기

# 1
try:
    a = [1,2]
    print(a[3])
    4/0
excpet ZeroDicisionError:
    print("0으로 나눌 수 없습니다.")
excpet IndecError:
    print("인덱싱할 수 없습니다.")
    
>>> 인덱싱할 수 없습니다. # 인덱싱 오류가 먼저 발생했기 때문에

    
# 2
try:
    a = [1,2]
    print(a[3])
    4/0
excpet ZeroDicisionError as e:
    print(e)
excpet IndecError as e:
    print(e)

>>> list index out of range


# 3
try:
    a = [1,2]
    print(a[3])
    4/0
excpet (ZeroDicisionError, IndexError) as e:
    print(e)

 

오류 회피하기

특정 오류가 발생할 경우 그냥 통과시켜야

할 때가 있다. pass를 사용하여 오류를 그냥

회피하도록 작성한 예제이다.

try:
    r = open("나없는파일", 'r')
excpet FileNotFoundError:
    pass

 

오류 일부러 발생시키기

프로그래밍을 하다 보면 종종 오류를

일부러 발생시켜야 할 경우도 생긴다.

파이썬은 raise 명령어를 사용하면

오류를 강제로 발생시킬 수 있다.

 

예를 들어 Bird 클래스를 상속받는

자식 클래스는 반드시 fly라는 함수를

구현하도록 만들고 싶은 경우.

class Bird:
    def fly(self):
        raise NotImplementedError

자식 클래스가 fly 함수를 구현하지

않은 상태로 fly 함수를 호출하면 반드시

Error가 뜰 것이다. 그러므로 fly 함수를

무조건 변형해서 사용하도록 강제를

걸어 놓는 것이다.

 

class Bird:
    def fly(self):
        raise NotImplementedError
        
class Eagle(Bird)"
    def fly(self):
        print("very fast")
        
eagle = Eagle()
eagle.fly()

이와 같이 부모 클래스와 자식 클래스에

같은 게 있으면 자식이 이기므로 이 경우엔

very fast가 출력된다.

 


내장함수

: 파이썬에서 기본적으로 포함하고 있는 함수

 

다 외울 필요는 없고 필요할 때마다

구글에 검색하길 추천

더보기

abs : 절댓값 

all : 모두 참인지 검사

any : 하나라도 참이 있는가?

chr : ASCII(아스키 코드_0~127사이의 숫자를 각 문자에 대응) 코드를 입력받아 문자 출력

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

divmod : 몫과 나머지를 튜플 형태로 돌려줌

enumerate : 열거하다 - 사전처럼 인덱스와 함께 리스트 내의 내용을 열거해줌

eval : 실행 후 결과값을 돌려줌

filter : 함수를 통과하여 참인 것만 돌려줌

hex : 정수를 받아 16진수로 변환하여 돌려줌

id : 고유 주소 값

input : 사용자 입력 받는 함수

int : 10진수 정수 형태로 변환

isinstance : 첫 번째 인수로 인스턴스, 두 번째 인수로 클래스 이름을 받아 입력받은 인스턴스가 그 클래스의 인스턴스인지 판단하여 Treu/False를 돌려줌

len : 길이

list : 리스트로 변환

map : 각 요소가 수팽한 결과를 돌려줌

max : 최대 값

min : 최소 값

oct : 정수 형태의 숫자를 8진수 문자열로 돌려줌

open : 파일 이름과 읽기 방법을 입력받아 파일 객체를 돌려주는 함수

ord : 문자의 아스키 코드 값을 돌려주는 함수

pow : 제곱한 결과값 반환

range : 범위

round : 반올림

sorted : 정렬

str : 문자열 반환

sum : 리스트나 튜플의 모든 요소의 합

tuple : 튜블 변환

type : 타입을 출력

zip : 자료형을 묶어주는 역할

 

라이브러리

: 외장함수라고도 하며

import해서 사용하는 함수들을 말한다.

 

sys, pickle, time, radom 등이 있다.

구글링해서 사용하기(암기XXX)


몇 가지 예시만 들어보면

다음과 같다.

# python에서 수학 계산을 하기 위해 사용할 수 있는 함수들의 묶음, 라이브러리 호출
import math

# 차례로 절대값, 올림, 내림
print(abs(-2))
print(math.ceil(3.5))
print(math.floor(3.3))

# sin, cos
print(math.sin(1))
print(math.cos(1))
# 다양한 사전 만들기
from collections import defaultdict	# 초기화가 되어있는 dict.
from collections import OrderedDict

D = defaultdict(int)	# 0으로 deault 초기화
D2 = OrderedDict()	# 저장(입력)한 순서 기억
D2['a'] = 1
D2['j'] = 14
…