파이썬 예외 처리



try, finally


프로그램 수행 중 예외가 발생을 하던 발생하지 않던 사용했던 리소스는 무조건 반납을 해야 합니다.

반납을 하지 않으면 메모리 leak이 발생해 언젠가 컴퓨터에서 이상동작을 일으키기 때문이죠.

이번에는 프로그램 종료 전에 예외 발생 여부와 상관없이 실행되는 구문인 finally에 대해 알아보도록 하겠습니다.


우선 아래 예제를 보자

실행 해보면 '파일 종료' 문구가 출력되지 않는 것을 알 수 있다.


#!/usr/bin/python

# -*- coding: utf-8 -*-


try:

    f = open('C:\\newfile.txt','r')

    retval = 10/0

    print('파일 종료1')

    f.close()

    print('파일 종료2')

except ZeroDivisionError as e :

    print(e)



이와같이 파일 종료를 하기 전에 예외가 발생하여 종료를 하지 못하는 현상이 발생 될 수 있다.

해결 방법은 except 안에도 파일 종료 함수를 넣어주는데 이것은 같은 종료문을 두번써서 깔끔하지도 못하고 

소스를 보는데 방해만 된다.


아래는 좋은 방법이 아니다...

#!/usr/bin/python

# -*- coding: utf-8 -*-


try:

    f = open('C:\\newfile.txt','r')

    retval = 10/0

    print('파일 종료1')

    f.close()

    print('파일 종료2')

except ZeroDivisionError as e :

    print(e)

    print('파일 종료1')

    f.close()

    print('파일 종료2')



이제 finally를 사용하여 예외 발생 여부와 상관없이 종료를 시켜 보자


 try:

   [예외가 발생하는 실행 문]

 except 발생오류 as 오류 메시지 변수 :

   [보통 오류 메시지 발생된 것을 출력]

 finally:
   [예외 발생 여부와 상관없이 실행 해야 할 명령어]



#!/usr/bin/python

# -*- coding: utf-8 -*-


try:

    f = open('C:\\newfile.txt','r')

    retval = 10/0

except ZeroDivisionError as e :

    print(e)

finally:

    print('파일 종료1')

    f.close()

    print('파일 종료2')





try, pass



예외가 발생 하여도 처리하지 않고 회피 할 수 있는 방법이 있다.

그것은 바로 pass를 사용하는 것인데 특정 예외가 발생 하면 그 예외를 처리하지 않는 방법을 설명하겠다.


 try:

   [예외가 발생하는 실행 문]

 except 발생오류 as 오류 메시지 변수 :

   pass


예제는 아래와 같다. 

#!/usr/bin/python

# -*- coding: utf-8 -*-


try:

    retval = 10/0

except ZeroDivisionError as e :

    pass


반응형

'프로그램 > Python' 카테고리의 다른 글

[Python] Python cmd 결과 값 받는 방법  (0) 2016.12.12
[Python] 예외 처리, try, except, else  (0) 2016.11.26
[Python] 모듈 #2  (0) 2016.11.13
[Python] 모듈 #1  (0) 2016.11.12
[Python]클래스(3)  (0) 2016.11.02

+ Recent posts