일반적으로 프로그래밍은 오류를 피하는게 맞지만, 오류를 무시하거나 적절히 처리해줘야 할 때도 있다. 이럴때 예외처리 문법을 활용할 수 있다.
파이썬으로 코딩하다보면 흔하게 나오는 것들만 정리해보면 다음과 같다.
기본 문법
try:
...
except [발생 오류[as 오류 메시지 변수]]:
...
try 블록 수행 중 오류가 발생하면 except 블록이 수행되고, try 블록에서 오류가 발생하지 않는다면 except 블록은 수행되지 않는다. [발생 오류[as 오류 메시지 변수]] 이 부분은 생략 가능하다. 오류 메시지 변수를 만들어 주면 except 블록에서 프린트 해서 오류의 내용을 알 수 있다.
try:
...
except 발생 오류1:
...
except 발생 오류2:
...
위와 같이 except를 여러 개 써놓으면 각각의 오류에 대한 예외 처리가 가능하다
try:
a = [1,2]
print(a[3])
4/0
except (ZeroDivisionError, IndexError) as e:
print(e)
위와 같이 except를 튜플 형태로 써놓으면 한 줄에서 여러 개의 오류를 동일하게 처리하는 것도 가능하다.
except Exception as e:
print(e)
except Exception을 쓰면 모든 에러에 대해 같은 처리를 할 수 있다.
try:
...
except [발생 오류[as 오류 메시지 변수]]:
...
else: # 오류가 없을 경우에만 수행된다.
...
if else 문같이 else도 사용 가능하다.
f = open('foo.txt', 'w')
try:
...
finally:
f.close()
finally절은 try문 수행 도중 예외 발생 여부에 상관없이 항상 수행된다. 위 코드에서 foo.txt를 열었는데, 에러가 나든 안나든 마지막에는 foo.txt 닫게 된다는 뜻이다. 어떤 경우에서든 close를 해야할 때 유용하다.
일부러 에러를 발생시켜야하는 경우가 있는데 이럴 때 raise를 쓸 수 있다. raise는 꼭 try와 같이 쓰이는 건 아니고 원하는 부분에서 자유롭게 쓸 수 있다.
raise ValueError
print("123")
>Traceback (most recent call last):
File "c:\Users\Desktop\practice.py", line 1, in <module>
raise ValueError
ValueError
위 코드를 실행하면 그냥 ValueError가 뜨고 123은 프린트 되지 않는다
raise + 에러 이름을 붙여 쓰거나 에러 이름("메시지")도 활용 할 수 있다.
a = int(input("1~5 까지 숫자 입력 : "))
if a < 1 or a > 5:
raise Error("밸류 에러")
print(f"입력한 a : {a} 입니다.")
6 입력
출력: raise Error("밸류 에러")
자료 출처
https://wikidocs.net/30
https://justkode.kr/python/try-except
https://blockdmask.tistory.com/538
https://wayhome25.github.io/python/2017/02/26/py-12-exception/