파이썬: 예외 처리

Ju_Nik_e·2023년 4월 26일

PYTHON

목록 보기
5/9

오류 예외 처리

try, except문

  • 기본구조
try:
    ...
except [발생오류 [as 오류변수]]:
    ...
  • try 블록 수행 중 오류가 발생하면 except 블록이 수행 됨
  • except 구문에서 사용한 []기호는 괄호 안의 내용을 생략할 수 있다는 표기법으로 다음 3가지 방법으로 사용 가능

1. try, except만 쓰는 방법

  • 오류 종류에 상관없이 오류가 발생하면 except 블록을 수행
try:
    ...
except:
    ...

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

  • 미리 정해놓은 오류와 동일한 오류일 경우에만 수행
try:
    ...
except 발생오류:
    ...

3. 오류변수까지 포함한 except문

  • 오류의 내용까지 알고 싶을 때 사용하는 방법
try:
    ...
except 발생오류 as 오류변수:
    ...

예시

try:
    4 / 0
except ZeroDivisionError as e:
    print(e)
>>> division by zero

try .. finally

  • try문 수행 도중 예외 발생 여부에 상관없이 수행함
  • 사용한 리소스를 close해야 할때 주로 사용
try:
    f = open('foo.txt', 'w')
    # 무언가를 수행한다.

    (... 생략 ...)

finally:
    f.close()  # 중간에 오류가 발생하더라도 무조건 실행된다.

여러 개의 오류처리

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

try ... else

  • 오류 발생 시 except절 수행, 오류가 없으면 else절이 수행됨
try:
    age=int(input('나이를 입력하세요: '))
except:
    print('입력이 정확하지 않습니다.')
else:
    if age <= 18:
        print('미성년자는 출입금지입니다.')
    else:
        print('환영합니다.')

오류 회피하기

  • 오류가 발생하더라도 그냥 통과시켜야할 경우
try:
    f = open("없는파일", 'r')
except FileNotFoundError:
    pass

오류 일부러 발생시키기

  • raise 명령어를 사용해 오류를 강제로 발생시킬 수 있음.
  • 부모클래스의 메서드를 상속 받되, 반드시 오버라이딩해서 구현하게끔 하고 싶을 때 사용
class Bird:
    def fly(self):
        raise NotImplementedError

class Eagle(Bird):
    pass

eagle = Eagle()
eagle.fly()

->오류 발생

예외 만들기

  • 직접 예외를 만들경우 Execption클래스를 상속하여 만들 수 있음
class MyError(Exception):
    pass
def say_nick(nick):
    if nick == '바보':
        raise MyError()
    print(nick)
    
say_nick("바보")

Traceback (most recent call last):
  File "...", line 11, in <module>
    say_nick("바보")
  File "...", line 7, in say_nick
    raise MyError()
__main__.MyError

0개의 댓글