Python 예외처리(try, except, else, finally, raise)
파이썬은 EAFP방식의 코딩스타일을 권장한다.
EAFP = It's Easier to Ask Forgiveness than Permission = 허락을 구하는 것보다 용서를 구하는 것이 쉽다
즉, 앞장에서 소개했던 파이썬에서 흔히 발생하는 에러들을 일단은 무시한채 수행(try)시키고, 에러가 발생하면 그때 처리(except)하겠다는 뜻이라고 한다.
[기본 구조]
try : 에러 발생 가능성이 있는 코드 실행
except : 에러명1
except : 에러명2
else : (for, if, try문) 에서 에러가 발생하지 않을때 실행
finally : 에러의 발생 여부와 관계없이 항상 실행되는 구문
# Example1
test = ['emilia', 'python', 'coding']
try:
x = test.index('error')
except ValueError:
print('에러떴대용~')
else:
print('에러안떴대용~')
# 출력 : 에러떴대용~
test 안에 'error' 라는 값이 없어서 ValueError가 발생을 했고 그래서 except 구문 실행
#Example2
test = ['emilia', 'python', 'coding']
try:
x = test.index('emilia')
except ValueError:
print('에러떴대용~')
else:
print('에러안떴대용~')
# 출력 : 에러안떴대용~
test 안에 'emilia' 값이 있어서 ValueError가 발생하지 않아 else 구문 실행
[Exception]
어떤 에러가 발생할지 모를때에 공백 또는 Exception으로 나두면 모든 Error 를 캐치한다.
except Exception :
a = 10
b = 0
try:
x = a/b
except Exception:
print('에러떴대용~')
else:
print('에러안떴대용~')
# 출력 : 에러떴대용~
# ZeroDivisionError 발생
[Finally]
finally 구문은 에러가 나던 안나던 무조건 출력되는 구문
a = 10
b = 0
try:
x = a/b
except Exception:
print('에러떴대용~')
else:
print('에러안떴대용~')
finally:
print('분발하자')
# 출력 : 에러떴대용~ \ 분발하자
[alias (as)]
as 를 사용해 에러 내용 출력한다.
try :
x = 1
y = ['emilia','python','coding']
print(y.index('hello'))
except ValueError as l:
print('ValueError 발생')
print('에러내용 :',l)
except IndexError :
print('IndexError 발생')
except Exception: #마지막에 Exception 넣어주는게 좋다
print('알 수 없는 에러임')
else :
print('에러발생 안함')
처음부터 Exception 넣어버리면 어떤 에러가 발생하든 '알 수 없는 에러임' 으로 출력이 될 것이다.
Exception은 가급적 맨 마지막에 넣을 것.
[raise]
raise는 에러를 직접 발생시킬 수 있게 해주는 구문이다.
try :
a = 'emilia'
if a == 'python' :
print('Pass')
else :
raise ValueError #ValueError를 직접 발생시킴
except ValueError :
print('문제발생')
# 출력 : 문제발생
이렇게 raise를 써서 일부러 ValueError 을 일으키게 할 수 있다. 그럼 자동으로 except 문으로 가 그에 해당하는 출력을 하게 된다.
이상 error관련된 예외처리 내용을 정리해봤다!