오류 처리를 위한 try, except, else, finally 문 그리고 raise 문
파이썬 실행 중 오류가 발생하면 실행중인 프로그램은 종료된다.
오류가 발생했을 때 이를 적절히 처리하여 프로그램이 종료되지 않게 하기 위해 try, except, else, finally 문을 사용한다.
다음은 파이썬 실행 중 발생 가능한 오류의 예이다.
<코드 1>
print(1/0)
<코드 2>
print(hello)
<코드 3>
print(1 + '2')
try, except, else, finally 문의 구조는 다음과 같으며, else 문과 finally 문의 사용은 선택사항이다.
try:
...
except:
...
else:
...
finally
...
try 문 내에 오류가 없는 코드를 작성한 후 실행시키면, except 문 외 try, else, finally 문 내의 코드가 차례로 실행된다.
<코드 4>
try:
print('try statement')
except:
print('except statement')
else:
print('else statement')
finally:
print('finally statement')
try 문 내에 1을 0으로 나누는 코드를 추가한 후 실행시키면 except 문의 코드가 실행된다.
<코드 5>
try:
print('try statement')
print(1/0)
except:
print('except statement')
else:
print('else statement')
finally:
print('finally statement')
임의 수를 0으로 나누면 ZeroDivisionError 오류가 발생한다. except 문은 발생이 예상되는 오류에 따라 다음의 코드와 같이 확장될 수 있다.
<코드 6>
try:
print('try')
print(1/0)
except ZeroDivisionError as e:
print('except ZeroDivisionError')
print(e)
except:
print('except')
else:
print('else')
finally:
print('finally')
except 문에는 발생이 예상되는 오류 타입을 하나 이상 정의할 수 있다.
<코드 7>
try:
print('try')
print(hello)
except (ZeroDivisionError, NameError, TypeError) as e:
print(e)
except:
print('except')
else:
print('else')
finally:
print('finally')
어떤 타입의 오류가 발생할지 예상되지 않는 경우 except 문에 Exception 클래스를 사용할 수도 있다.
<코드 8>
try:
print('try')
with open('dummy.abc') as f_dummy:
pass
except Exception as e:
print(e)
else:
print('else')
finally:
print('finally')
ZeroDivisionError, NameError, TypeError 및 FileNotFoundError 등은 Exception 클래스의 서브 클래스(child class)이다.
raise 문으로 오류를 발생시킬 수도 있다.
<코드 9>
try:
print('try')
raise Exception('My Exception Error')
except Exception as e:
print(e)
else:
print('else')
finally:
print('finally')
'코딩 > 파이썬 기초' 카테고리의 다른 글
파이썬 튜토리얼 041. 클래스 정의 및 클래스 attributes (0) | 2021.08.24 |
---|---|
파이썬 튜토리얼 040. global, nonlocal 키워드를 통한 namespace 이해 (0) | 2021.08.20 |
파이썬 튜토리얼 038. JSON 파일 쓰기 (0) | 2021.08.12 |
파이썬 튜토리얼 037. 텍스트 파일 읽기 (0) | 2021.08.04 |
파이썬 튜토리얼 036. 텍스트 파일 쓰기 (0) | 2021.08.03 |