[Python]예외처리(try/except)

파이썬의 예외처리에 대해 알아보자.

# 파이썬 예외처리
# 예외 종류
# SyntaxError, TypeError, NameError, IndexError, ValueError, KeyError...

# SyntaxError : 문법오류
# print('error)  <- 따옴표 누락

# NameError : 참조 없음
# a = 10
# b = 15
# print(c) <-- 정의되지 않은 변수 참조

# ZeroDivisionError
# print(100 / 0)

# IndexError
# x = [50, 10, 30]
# print(x[5])
# x.pop()
# x.pop()
# x.pop()
# x.pop() <-- 더 이상 뺄 수 없다.

# KeyError
# dic = {'name': 'jigi', 'age': 10}
# print(dic['birth']) <-- 없는 속성(키)으로 접근

# 예외가 없는 것을 가정하고 개발 -> 런타임 예외발생 시 예외처리 권장(EAFP)

# AttributeError : 모듈, 클래스에 있는 잘못된 속성사용 예외
# import time
# print(time.time2()) <-- time2()라는 메서드는 존재하지 않음

# ValueError
# x = [10, 100, 200]
# x.remove(50) <-- 존재하지 않은 값(value)를 삭제하려고 함

# FileNotFoundError
# f = open('test.txt')  <-- test.txt 라는 파일이 존재하지 않아서 발생하는 오류

# TypeError : 자료형에 맞지 않는 연산을 수행하는 경우 발생
# x = [1, 2]
# y = (1, 2)
# z = 'text'
# print(x + y) <- 자료형이 서로 달라 오류발생
# print(x + z) <- 자료형이 서로 달라 오류발생
# print(y + z) <- 자료형이 서로 달라 오류발생

# 예외처리 기본
# try : 에러가 발생할 가능성이 있는 코드
# except 에러명1: 예외가 발생할 때 처리할 블록, 여러개 선언가능
# else : try 블록의 에러가 없을 경우 수행
# finally : 항상 처리해야할 블록

name = ['jigi', 'best', 'creative']

# 예제1
try:
    z = 'jigi'
    x = name.index(z)
    print('Found it! {} in name'.format(z, x + 1))
except ValueError:
    print('Not found it')
else:
    print('OK')

print('Continue next Line')


# 예제2
try:
    z = 'jigi'
    x = name.index(z)
    print('Found it! {} in name'.format(z, x + 1))
except Exception:  # 모든 예외를 잡음 (Exception은 생략가능)
    print('Not found it')
else:
    print('OK')

print('Continue next Line')

# 예제3
try:
    z = 'jigi'
    x = name.index(z)
    print('Found it! {} in name'.format(z, x + 1))
except Exception as e:  # 모든 예외를 잡음 (Exception은 생략가능)
    print(e)
    print('Not found it')
else:
    print('OK')
finally:
    print('Allways execute!!')

print('Continue next Line')


# 예제4 : 예외를 강제로 발생시킴(raise)
try:
    a = 'jigi'
    if a == 'jigi':
        print('Pass')
    else:
        print('Not allow')
        raise ValueError
except ValueError:
    print('Catch ValueError!!')
else:
    print("OK")

print('Continue next Line')

결과:

Found it! jigi in name
OK

Found it! jigi in name
OK

Found it! jigi in name
OK
Allways execute!!

Pass
OK

You may also like...

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다