해당사이트를 보고 필요한 부분만 공부하려고 정리하였음
[예외처리]
오류가 발생하는 이유: 프로그램이 잘못동작되는 것을 막기 위한 파이썬의 배려
파이썬은, 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 |