본문 바로가기
Programming/Python

10. 예외처리

by goatlab 2021. 12. 15.
728x90
반응형
SMALL

예외처리

 

프로그램을 만들다 보면 수없이 많은 오류를 만나게 된다. 이를 위해 python은 try, except를 사용해서 예외적으로 오류를 처리할 수 있게 해준다.

 

오류 예외 처리 기법

 

1. try, except만 쓰는 방법

 

try:
    ...
except [발생 오류[as 오류 메시지 변수]]:
    ...

 

2. 발생 오류만 포함한 except문

 

try:
    ...
except 발생 오류:
    ...

 

3. 발생 오류와 오류 메시지 변수까지 포함한 except문

 

try:
    ...
except 발생 오류 as 오류 메시지 변수:
    ...
try: # 1을 0으로 나누려고 하면 ZeroDivisionError가 발생
    1 / 0
except ZeroDivisionError as e:
    print(e)

 

try .. finally

 

try문에는 finally절을 사용할 수 있다. finally절은 try문 수행 도중 예외 발생 여부에 상관없이 항상 수행된다. 보통 finally절은 사용한 리소스를 close해야 할 때에 많이 사용한다.

 

f = open('xxx.txt', 'a')
try:
    # 무언가를 수행.
finally:
    f.close()

 

여러 개의 오류 처리

 

try:
    ...
except 발생 오류1:
   ... 
except 발생 오류2:
   ...
try:
    a = [1,2]
    print(a[3])
    1/0
except ZeroDivisionError:
    print("0으로 나눌 수 없다.")
except IndexError:
    print("인덱싱 할 수 없다.")

 

오류 회피하기

 

try: # try문 안에서 FileNotFoundError가 발생할 경우에 pass를 사용하여 오류를 회피
    f = open("없는 파일", 'r')
except FileNotFoundError:
    pass

 

오류 발생시키기

 

class Game:
    def play(self):
        raise NotImplementedError
        
class Soccer(Game):
    pass

soccer = Soccer()
soccer.play()

--> raise NotImplementedError
--> NotImplementedError

class Soccer(Game):
    def play(self):
        print("very well")

soccer = Soccer()
soccer.play()
--> very well

 

예외 만들기

 

class MyError(Exception):
    pass
    
def say_nick(nick):
    if nick == '천재':
        raise MyError()
    print(nick)
    
say_nick("천사")
say_nick("천재")
--> raise MyError()

try:
    say_nick("천사")
    say_nick("천재")
except MyError:
    print("허용되지 않는 별명입니다.")
    
say_nick("천사")
say_nick("천재")
--> 천사
--> 허용되지 않는 별명입니다.

 

https://wikidocs.net/30

 

05-4 예외 처리

프로그램을 만들다 보면 수없이 많은 오류를 만나게 된다. 물론 오류가 발생하는 이유는 프로그램이 잘못 동작하는 것을 막기 위한 파이썬의 배려이다. 하지만 때때로 이러한 오류 ...

wikidocs.net

 

728x90
반응형
LIST

'Programming > Python' 카테고리의 다른 글

12. XML (Extensible Markup Language)  (0) 2021.12.15
11. 파일 입출력  (0) 2021.12.15
09. 모듈 (Module)  (0) 2021.12.08
08. 클래스 상속 (Class inheritance)  (0) 2021.12.08
07. 클래스 (Class)  (0) 2021.12.08