사용자 도구

사이트 도구


wiki:ai:python:예외처리

예외 처리

  • description : 예외 처리
  • author : 도봉산핵주먹
  • email : hylee@repia.com
  • lastupdate : 2020-06-25

예외 처리

예제 코드

# Section10
# 파이썬 예외처리의 이해
 
# 예외 종류
# SyntaxError, TypeError, NameError, IndexError, ValueError, KeyError..
# 문법적으로 에러가 없지만 코드 실행 프로세스에서 발생하는 예외 처리 중요
 
# linter : 코드 스타일, 문법 체크
 
##############################
### SyntaxError : 잘못된 문법
##############################
# print('test)
# print('Hello'))
# if True
#    pass
# a = 20; b = 30; a+ = b
# x => y
 
 
##############################
### NameError : 참조 변수 없음
##############################
 
a = 10
b = 15
 
# print(c)
 
##############################
### ZeroDivisionError : 0 나누기 에러
##############################
 
# print(10 / 0)
 
 
##############################
### IndexError : 인덱스 범위 오버
##############################
 
x = [10, 20, 30]
 
# print(x[1])
# print(x[3]) # 예외 발생
# print(x.pop())
# print(x.pop())
# print(x.pop())
# print(x.pop()) # 예외 발생
# print(x.pop(50)) # 예외 발생
 
 
##############################
### KeyError
##############################
 
dic = {'name': 'Kim', 'Age': 33, 'City': 'Seoul'}
 
# print(dic['hobby'])     # 키가 존재하지 않으면 예외
# print(dic.get('hobby')) # 안전
 
 
# 항상 예외가 발생하지 않을 것으로 가정하고 먼저 코딩
# 그 후 런타임 예외 발생 시 예외처리 권장(EAFP 코딩 스타일)
 
 
##############################
### AttributeError : 모듈, 클래스에 있는 잘못된 속성 사용시에 예외
##############################
 
import time
 
# print(time.time())
# print(time.month()) # 예외 발생
 
x = [1, 2, 3]
# print(x.append(4))
# print(x.add(10))
 
##############################
### ValueError : 참조 값이 없을 때 예외
##############################
 
x = [1, 5, 9]
 
# x.remove(5)
# print(x)
 
# x.remove(100)
# print(x) # 예외 발생
 
t = (10, 100, 1000)
 
print(t.index(100))
# print(t.index(7)) # 예외 발생
 
##############################
### FileNotFoundError
##############################
 
# f = open('test.txt') # 얘외 발생
 
##############################
### TypeError : 자료형에 맞지 않는 연산을 수행 할 경우
##############################
 
x = [1, 2]
y = (1, 2)
z = 'test'
 
# print(x + y) # 예외 발생
# print(x + z) # 예외 발생
# print(y + z) # 예외 발생
# print(sum([1,2,3],10,1)) # 예외 발생
 
# print(x + list(y))
# print(x + list(z)
 
##########################################################
# 예외 처리 기본
# try               에러가 발생 할 가능성이 있는 코드 실행
# except 에러명1:    여러 개 가능(에러 처리)
# except 에러명2: 
# else:             try 블록의 에러가 없을 경우 실행
# finally:          항상 실행
##########################################################
 
 
# 예제1
 
name = ['Kim', 'Lee', 'Park']
 
try:
    z = 'Kim'  # 'Cho' 예외 발생
    x = name.index(z)
    print('{} Found it! {} in name'.format(z, x + 1))
except ValueError:
    print('Not found it! - Occurred ValueError!')
else:
    print('ok! else!')
 
print()
 
# 예제2
 
try:
    z = 'Kim'  # 'Cho' 예외 발생
    x = name.index(z)
    print('{} Found it! {} in name'.format(z, x + 1))
except:  # 모든 에러를 처리(Exception)
    print('Not found it! - Occurred ValueError!')
else:
    print('ok! else!')
 
print()
 
# 예제3
 
try:
    z = 'Kim'  # 'Cho' 예외 발생
    x = name.index(z)
    print('{} Found it! {} in name'.format(z, x + 1))
except Exception as e:
    print(e)  # 에러 내용 출력
    # pass # 임시로 에러 해결 시 예외 처리
else:
    print('ok! else!')
finally:
    print('ok! finally!')  # 무조건 수행 됨
 
print()
 
# 예제4
# 예외처리는 하지 않지만, 무조건 수행 되는 코딩 패턴
 
try:
    print('try')
finally:
    print('finally')
 
print()
 
# 예제5
# 예외 발생 : raise
# raise 키워드로 예외 직접 발생
 
try:
    a = 'Park'
    if a == 'Kim':
        print('Ok! pass')
    else:
        raise ValueError
except ValueError:
    print('Raise! Occurred ValueError')
except Exception:
    print('Occurred Exception')
else:
    print('ok! else!')
 
##########################################################
# 예외 처리 기본
# try               에러가 발생 할 가능성이 있는 코드 실행
# except 에러명1:    여러 개 가능(에러 처리)
# except 에러명2: 
# else:             try 블록의 에러가 없을 경우 실행
# finally:          항상 실행
##########################################################

실행 콘솔

1
Kim Found it! 1 in name
ok! else!
 
Kim Found it! 1 in name
ok! else!
 
Kim Found it! 1 in name
ok! else!
ok! finally!
 
try
finally
 
Raise! Occurred ValueError

Tip

/var/services/web/dokuwiki/data/pages/wiki/ai/python/예외처리.txt · 마지막으로 수정됨: 2023/01/13 18:44 (바깥 편집)