본문 바로가기

파이썬

Python예외처리

반응형

출처 https://wikidocs.net/30 

해당사이트를 보고 필요한 부분만 공부하려고 정리하였음



[예외처리]

오류가 발생하는 이유: 프로그램이 잘못동작되는 것을 막기 위한 파이썬의 배려

파이썬은, try, except를 이용하여 오류를 처리할수있게 해준다.

파이썬은 오류가 발생하면 프로그램을 중단하고 오류메세지를 보여준다.


[예외처리기법-오류검출]


-Try,Except문 


오류처리를 위한 try,except문의 기본구조


try:

    ...

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


[]의 기호는 괄호 안의 내용을 생략 할 수 있다는 관례적인 표기법 


1. try, except만 쓰는 방법

try:
    ...
except:
    ...

이 경우는 오류 종류에 상관없이 오류가 발생하기만 하면 except 블록을 수행한다.

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

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

이 경우는 오류가 발생했을 때 except문에 미리 정해 놓은 오류 이름과 일치할 때만 except 블록을 수행한다는 뜻이다.

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

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

이 경우는 두 번째 경우에서 오류 메시지의 내용까지 알고 싶을 때 사용하는 방법이다.

이 방법의 예를 들어 보면 다음과 같다.

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

위처럼 4를 0으로 나누려고 하면 ZeroDivisionError가 발생하여 except 블록이 실행되고 e라는 오류 메시지를 다음과 같이 출력한다.

결과값: division by zero




-Try,Finally문 


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


1. 자주사용되는 예


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

foo.txt라는 파일을 쓰기 모드로 연 후에 try문이 수행된 후 예외 발생 여부에 상관없이 finally절에서 f.close()로 열린 파일을 닫을 수 있다.


2.여러개의 오류 처리하기


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

즉, 다음과 같이 0으로 나누는 오류와 인덱싱 오류를 다음과 같이 처리할 수 있다.

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

a는 2개의 요소값을 가지고 있기 때문에 a[3]는 IndexError를 발생시키므로 "인덱싱 할 수 없습니다."라는 문자열이 출력될 것이다. 인덱싱 오류가 먼저 발생했으므로 4/0으로 발생되는 ZeroDivisionError는 발생하지 않았다.

이전에 알아보았던 것과 마찬가지로 오류메시지도 다음과 같이 가져올 수 있다.

try:
    a = [1,2]
    print(a[3])
    4/0
except ZeroDivisionError as e:
    print(e)
except IndexError as e:
    print(e)
except (ZeroDivisionError, IndexError) as e:
    print(e)

2개 이상의 오류를 동시에 처리하기 위해서는 위와같이 괄호를 이용하여 함께 묶어주어 처리하면 된다.


[예외처리기법-오류회피]

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

try문 내에서 FileNotFoundError가 발생할 경우 pass를 사용하여 오류를  회피


[예외처리기법-오류일부러발생]








[알아두기]


try:
    # 에러가 발생할 가능성이 있는 코드
except Exception as ex: # 에러 종류
    print('에러가 발생 했습니다', ex) # ex는 발생한 에러의 이름을 받아오는 변수




반응형

'파이썬' 카테고리의 다른 글

Python list,dictionary  (0) 2019.01.16
Python dictionry에 list추가 및 csv파일 읽기  (0) 2019.01.15
python logging모듈사용하기  (0) 2019.01.14
파이참 입력 이상할때  (4) 2018.12.24