1. 예외처리
- 오류가 발생되었을 떄 별도의 처리를 하거나 무시하고 프로그램을 실행하는 것
- 오류가 발생 될 것으로 예상되는 문장을 try블록에 코딩하고, try 블록에 코딩된 내용을 실행하다가 오류가 발생하면 더이상 try블록의 내용을 실행하지 않고 해당 오류의 except블록에 코딩된 내용을 실행
- 파이썬은 발생할 수 있는 모든 문제를 예외 클래스로 만들어 놓음
1. 1-1. try except 사용하기
try:
오류가 발생할 것으로 예상되는 문장
...
...
except:
오류가 발생했을 경우 실행할 문장
...
In [ ]:
print(10/3)
print(5/0) #ZeroDivisionError: division by zero
print(4/2)
3.3333333333333335
---------------------------------------------------------------------------
ZeroDivisionError Traceback (most recent call last)
<ipython-input-1-9d03c0c5fbb8> in <module>
1 print(10/3)
----> 2 print(5/0)
3 print(4/2)
ZeroDivisionError: division by zero
In [ ]:
try:
print(10/3)
print(5/0)
print(4/2)
except:
print('0으로 나눌 수 없습니다')
print('프로그램을 종료합니다')
3.3333333333333335
0으로 나눌 수 없습니다
프로그램을 종료합니다
In [ ]:
data = [10, 20, 30, 40 , 50]
print(data[5]) #IndexError: list index out of range
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-3-32a8ef74e897> in <module>
1 data = [10, 20, 30, 40 , 50]
----> 2 print(data[5])
IndexError: list index out of range
In [ ]:
try:
data = [10, 20, 30, 40 , 50]
print(data[0])
print(data[1])
print(data[5])
print(data[3])
except:
print('인덱스 지정이 올바르지 않습니다')
print('프로그램을 종료합니다')
10
20
인덱스 지정이 올바르지 않습니다
프로그램을 종료합니다
1-2. 특정 예외만 처리하기
try:
오류가 발생할 것으로 예상되는 문장
...
...
except 예외이름:
오류가 발생했을 경우 실행할 문장
...
In [ ]:
try:
print(10/3)
print(5/0)
print(4/2)
except ZeroDivisionError:
print('0으로 나눌 수 없습니다')
print('프로그램을 종료합니다')
3.3333333333333335
0으로 나눌 수 없습니다
프로그램을 종료합니다
In [ ]:
try:
data = [10, 20, 30, 40 , 50]
print(10/3)
# print(5/0)
print(4/2)
print(data[5])
except ZeroDivisionError:
print('0으로 나눌 수 없습니다')
except IndexError:
print('인덱스 지정이 올바르지 않습니다')
print('프로그램을 종료합니다')
3.3333333333333335
2.0
인덱스 지정이 올바르지 않습니다
프로그램을 종료합니다
1-3. 예외 에러 메세지 받기
try:
오류가 발생할 것으로 예상되는 문장
...
...
except 예외이름 as 변수:
오류가 발생했을 경우 실행할 문장
...
In [ ]:
try:
data = [10, 20, 30, 40 , 50]
print(10/3)
# print(5/0)
print(4/2)
print(data[5])
except ZeroDivisionError as e:
print('0으로 나눌 수 없습니다', e)
except IndexError as e:
print('인덱스 지정이 올바르지 않습니다', e)
print('프로그램을 종료합니다')
3.3333333333333335
2.0
인덱스 지정이 올바르지 않습니다 list index out of range
프로그램을 종료합니다
1-4, 예외가 발생하지 않았을 경우 처리하기
try:
오류가 발생할 것으로 예상되는 문장
...
...
except 예외이름 as 변수:
오류가 발생했을 경우 실행할 문장
...
else:
오류가 발생하지 않았을 경우 실행할 문장
In [ ]:
try:
data = [10, 20, 30, 40 , 50]
string = '오늘은 즐거운 예외처리 시간!'
print(10/3)
# print(5/0)
print(4/2)
# print(data[5])
# print('%d' % string)
except ZeroDivisionError as e:
print('0으로 나눌 수 없습니다', e)
except IndexError as e:
print('인덱스 지정이 올바르지 않습니다', e)
except TypeError as e:
print('데이터 타입이 올바르지 않습니다', e)
else:
print('정상적인 프로그램 진행')
print('프로그램을 종료합니다')
3.3333333333333335
2.0
정상적인 프로그램 진행
프로그램을 종료합니다
1-5. 예외와 관계 없이 코드 실행하기
try:
오류가 발생할 것으로 예상되는 문장
...
...
except 예외이름 as 변수:
오류가 발생했을 경우 실행할 문장
...
else:
오류가 발생하지 않았을 경우 실행할 문장
finally:
예외발생 여부와 관계없이 항상 실행할 코드
** finaly => 항상 실행!
In [ ]:
try:
data = [10, 20, 30, 40 , 50]
string = '오늘은 즐거운 예외처리 시간!'
print(10/3)
# print(5/0)
print(4/2)
# print(data[5])
# print('%d' % string)
except ZeroDivisionError as e:
print('0으로 나눌 수 없습니다', e)
except IndexError as e:
print('인덱스 지정이 올바르지 않습니다', e)
except TypeError as e:
print('데이터 타입이 올바르지 않습니다', e)
else:
print('정상적인 프로그램 진행')
finally:
print('오류에 상관없이 무조건 실행되는 문장')
print('프로그램을 종료합니다')
3.3333333333333335
2.0
정상적인 프로그램 진행
오류에 상관없이 무조건 실행되는 문장
프로그램을 종료합니다
문제
데이터를 입력하면 정렬하여 출력하는 프로그램을 작성해보자. (단, 숫자와 문자를 섞어 입력하면 숫자 + 문자 형식으로 정렬, 000을 입력하면 정렬을 시작함)
- 데이터를 입력하세요: abc
- 데이터를 입력하세요: 123
- 데이터를 입력하세요: 1
- 데이터를 입력하세요: bbb
- 데이터를 입력하세요: 000 결과 [ 1, 123, 'abc, 'bbb']
In [ ]:
dlist = []
try:
data = (input('데이터를 입력하세요: '))
dlist.append(data)
print(dlist.sort())
데이터를 입력하세요: abc
None
In [ ]:
num = []
string = []
while True:
data = input('데이터를 입력하세요: ')
if data == '000':
break
try:
num.append(int(data))
except:
string.append(data)
num.sort()
string.sort()
print(num + string)
데이터를 입력하세요: abc
데이터를 입력하세요: 123
데이터를 입력하세요: 1
데이터를 입력하세요: bbb
데이터를 입력하세요: 000
[1, 123, 'abc', 'bbb']
2. 예외 발생시키기
In [ ]:
try:
n = int(input('짝수를 입력하세요: '))
if n%2 != 0:
raise Exception('짝수가 아닙니다') #예외를 발생시킴
print(n)
except Exception as e:
print('예외가 발생했습니다', e)
짝수를 입력하세요: 7
예외가 발생했습니다 짝수가 아닙니다
In [ ]:
def func1():
n = int(input('짝수를 입력하세요: '))
if n%2 != 0:
raise Exception('짝수가 아닙니다') #예외를 발생시킴
print(n)
try:
func1()
except Exception as e:
print('예외가 발생했습니다', e)
짝수를 입력하세요: 7
예외가 발생했습니다 짝수가 아닙니다
In [ ]:
def func1():
n = int(input('짝수를 입력하세요: '))
if n%2 != 0:
raise Exception('짝수가 아닙니다') #예외를 발생시킴
print(n)
func1()
print ('프로그램을 종료합니다')
In [ ]:
def func1():
func2()
In [ ]:
def func2():
func3()
In [ ]:
def func3():
try:
print('%d' % '문자열 출력')
except TypeError:
print('타입이 올바르지 않습니다!')
In [ ]:
func1()
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-24-d88c41ef3303> in <module>
----> 1 func1()
<ipython-input-21-e7141b1060fc> in func1()
1 def func1():
----> 2 func2()
<ipython-input-22-1f3908037e17> in func2()
1 def func2():
----> 2 func3()
<ipython-input-23-3486bbd565c9> in func3()
1 def func3():
----> 2 print('%d' % '문자열 출력')
TypeError: %d format: a number is required, not str
In [ ]:
def func1():
try:
func2()
except TypeError:
print('타입이 올바르지 않습니다')
def func2():
func3()
def func3():
print('%d' % '문자열 출력')
func1()
'KDT 수업 > Python' 카테고리의 다른 글
27. 파이썬과 MySQL 연동 (0) | 2023.03.22 |
---|---|
26. DAO, DTO, VO (0) | 2023.03.22 |
[파이썬] 23.변수의 타입 (0) | 2023.03.14 |
[파이썬] 22. 클로저와 데코레이터 (0) | 2023.03.14 |
[파이썬] 21. 파일 입출력 (0) | 2023.03.14 |