Python: 예외처리

Mika·2021년 12월 17일
1

Python

목록 보기
3/5

1. try ... else ...

오류가 발생하지 않았을 경우에만 특정 코드를 실행하는 방법도 있다. if문에서 보았던 else문을 try에도 쓸 수 있다.

a = [1,2,3]
try:
  print(a[2])
except:
  print("에러가 발생했습니다.")
else:
  print("정상적으로 작동했습니다.")

2. finally

리소스(파일 등)를 사용하고 있는 도중에 에러가 나서 실행이 멈추게 되면 리소스 점유를 해제(close)하지 못할 수도 있다. 이를 방지하기 위해 파이썬에는 finally라는 구문이 있다. finally는 try문이 성공하든 실패하든 항상 실행된다. 보통 리소스를 해제(close)해야 할 때 사용한다.

f = open('newfile.txt', 'w')
try:
    10 / 0
except ZeroDivisionError as e:
    print(e)
finally:
    f.close()

3. 데이터 처리에서 예외 처리

데이터 처리에서는 결측값(missing data) 등 때문에 예외가 자주 발생한다. 이 때 예외처리를 사용할 수 있다.

mylist = [1,2,3,None,5,6]
total = 0
for i in mylist:
  try: 
    total += i
  except:
    pass
total
---------------------------
17

4. 오류 일부러 만들기

때때로 프로그래밍을 할 때 오류를 일부러 발생시키는 경우도 있다. 잘못된 실행을 미리 막아야 하거나, 테스트를 할 때 에러를 발생시키는 경우가 있다.

파이썬에서는 raise 명령어를 사용해 오류를 일부러 발생시킬 수 있다.

def size_of_triangle(base, height):
  if base < 0:
    raise ValueError("base cannot be less than 0")
  if height < 0:
    raise ValueError("height cannot be less than 0")
  return base * height / 2
size_of_triange(4, -3)
ValueError                                Traceback (most recent call last)
<ipython-input-28-5cbb17452249> in <module>()
----> 1 size_of_triange(4, -3)
<ipython-input-26-9299de26885d> in size_of_triange(base, height)
      3     raise ValueError("base cannot be less than 0")
      4   if height < 0:
----> 5     raise ValueError("height cannot be less than 0")
      6 
      7   return base * height / 2
ValueError: height cannot be less than 0

5. 발생 오류정보 객체를 변수에 담기

발생한 오류에 대해 더 많은 정보를 알고 싶다면 오류에 대한 정보가 담긴 객체를 변수에 담아서 접근할 수 있다.

다음과 같은 문법이 쓰인다.

try:
    ...
except [오류 종류 [as 오류 변수]]:
    ...
------------------------------------
e.g.)
try:
    10 / 0
except ZeroDivisionError as e:
    print(e)

6. 몇 가지 예외 메시지들

ImportError: 말 그대로 import에 문제가 있을 때
IndexError: 리스트의 인덱스를 초과하는 동작이 발생했을 때
NameError: 변수명을 특정하지 못할 때
SyntaxError: 문법상 오류
TypeError: 변수형 사용이 적절하지 못할 때
ValueError: 변수형은 일치하지만 값에 문제가 있을 때

0개의 댓글