250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- node.js
- View
- MySqlDB
- count()
- choice()
- __getitem__
- __len__
- JS
- fnmatch
- decode()
- zipfile
- glob
- __annotations__
- discard()
- mro()
- HTML
- locals()
- remove()
- CSS
- MySQL
- fileinput
- inplace()
- 오버라이딩
- items()
- 파이썬
- __sub__
- shutil
- Database
- randrange()
- shuffle()
Archives
- Today
- Total
흰둥이는 코드를 짤 때 짖어 (왈!왈!왈!왈!왈!왈!왈!왈!왈!왈!왈!)
(파이썬) 예외 처리 본문
728x90
반응형
1. 예외 처리
- 오류가 발생되었을 때 별도의 처리를 하거나 무시하고 프로그램을 실행하는 것
- 오류가 발생될 것으로 예상되는 문장을 try 블록에 코딩하고, try 블록에 코딩된 애용을 실행하다가 오류가 발생하면 더이상 try 블록의 내용을 실행하지 않고 해당 오류의 except 블록에 코딩된 내용을 실행
- 파이썬은 발생할 수 있는 모든 문제를 예외 클래스로 만들어 놓음
1-1. try except 사용하기
try:
오류가 발생할 것으로 예상되는 문장
...
...
except:
오류가 발생했을 경우 실행할 문장
...
In [1]:
print(10 / 3)
print(5 / 0) # ZeroDivisionError: division by zero
print(4 / 2)
3.3333333333333335
---------------------------------------------------------------------------
ZeroDivisionError Traceback (most recent call last)
<ipython-input-1-5340b6c8dc82> in <module>
1 print(10 / 3)
----> 2 print(5 / 0) # ZeroDivisionError: division by zero
3 print(4 / 2)
ZeroDivisionError: division by zero
In [4]:
try:
print(10 / 3)
print(5 / 0)
print(4 / 2)
except:
print('0으로 나눌 수 없습니다.')
print('프로그램을 종료합니다.')
3.3333333333333335
0으로 나눌 수 없습니다.
프로그램을 종료합니다.
In [5]:
data = [10, 20, 30, 40, 50] # IndexError: list index out of range
print(data[5])
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-5-cd37edc1f1ce> in <module>
1 data = [10, 20, 30, 40, 50] # IndexError: list index out of range
----> 2 print(data[5])
IndexError: list index out of range
In [6]:
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 [7]:
try:
print(10 / 3)
print(5 / 0)
print(4 / 2)
except ZeroDivisionError:
print('0으로 나눌 수 없습니다.')
print('프로그램을 종료합니다.')
3.3333333333333335
0으로 나눌 수 없습니다.
프로그램을 종료합니다.
In [8]:
try:
print(10 / 3)
print(5 / 0)
print(4 / 2)
except IndexError:
print('0으로 나눌 수 없습니다.')
print('프로그램을 종료합니다.')
3.3333333333333335
---------------------------------------------------------------------------
ZeroDivisionError Traceback (most recent call last)
<ipython-input-8-b1b750898c22> in <module>
1 try:
2 print(10 / 3)
----> 3 print(5 / 0)
4 print(4 / 2)
5 except IndexError:
ZeroDivisionError: division by zero
In [9]:
try:
print(10 / 3)
# print(5 / 0)
print(4 / 2)
except ZeroDivisionError:
print('0으로 나눌 수 없습니다.')
print('프로그램을 종료합니다.')
3.3333333333333335
2.0
프로그램을 종료합니다.
In [10]:
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 [11]:
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 [12]:
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('데이터 타입이 올바르지 않습니다')
else:
print('정상적인 프로그램 진행')
print('프로그램을 종료합니다.')
3.3333333333333335
2.0
정상적인 프로그램 진행
프로그램을 종료합니다.
1-5. 예외와 관계없이 코드 실행하기
try:
오류가 발생할 것으로 예상되는 문장
...
...
except 예외이름 as 변수:
오류가 발생했을 경우 실행할 문장
...
else:
오류가 발생하지 않았을 경우 실행할 문장
finally:
예외 발생 여부와 관계없이 항상 실행할 코드드
In [13]:
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('데이터 타입이 올바르지 않습니다')
else:
print('정상적인 프로그램 진행')
finally:
print('오류에 관계없이 무조건 실행되는 문장')
print('프로그램을 종료합니다.')
3.3333333333333335
2.0
데이터 타입이 올바르지 않습니다
오류에 관계없이 무조건 실행되는 문장
프로그램을 종료합니다.
문제
데이터를 입력하면 오름차순 정렬하여 출력하는 프로그램을 작성해보자 (단. 숫자와 문자를 섞어 입력하면 숫자+문자 형식으로 정렬, 000을 입력하면 정렬을 시작함)
- 데이터를 입력하세요: abc
- 데이터를 입력하세요: 123
- 데이터를 입력하세요: 1
- 데이터를 입력하세요: bbb
- 데이터를 입력하세요: 000 결과 [1, 123, 'abc', 'bbb']
- 나의 풀이
In [14]:
string = []
integer = []
result = []
while True:
data = input('데이터를 입력하세요: ')
if data == '000':
break
try:
int(data)
except:
string.append(data)
string.sort()
else:
integer.append(data)
integer.sort()
finally:
result = integer + string
print(result)
데이터를 입력하세요: abc
데이터를 입력하세요: 123
데이터를 입력하세요: 1
데이터를 입력하세요: bbb
데이터를 입력하세요: 000
['1', '123', 'abc', 'bbb']
- 강사님 풀이
In [15]:
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 [17]:
try:
n = int(input('짝수를 입력하세요: '))
if n % 2 != 0:
raise Exception('짝수가 아닙니다') # 예외를 발생시킴
print(n)
except Exception as e:
print('예외가 발생 했습니다.', e)
짝수를 입력하세요: 7
예외가 발생 했습니다. 짝수가 아닙니다
In [20]:
def func1():
n = int(input('짝수를 입력하세요: '))
if n % 2 != 0:
raise Exception('짝수가 아닙니다')
print(n)
try:
func1()
except Exception as e:
print('예외가 발생 했습니다.', e)
짝수를 입력하세요: 7
예외가 발생 했습니다. 짝수가 아닙니다
In [21]:
def func1():
n = int(input('짝수를 입력하세요: '))
if n % 2 != 0:
raise Exception('짝수가 아닙니다')
print(n)
func1()
print('프로그램을 종료합니다')
짝수를 입력하세요: 7
---------------------------------------------------------------------------
Exception Traceback (most recent call last)
<ipython-input-21-5d71f77ba170> in <module>
5 print(n)
6
----> 7 func1()
8 print('프로그램을 종료합니다')
<ipython-input-21-5d71f77ba170> in func1()
2 n = int(input('짝수를 입력하세요: '))
3 if n % 2 != 0:
----> 4 raise Exception('짝수가 아닙니다')
5 print(n)
6
Exception: 짝수가 아닙니다
In [30]:
def func1():
func2()
In [31]:
def func2():
func3()
In [32]:
def func3():
try:
print('%d' % '문자열 출력')
except TypeError:
print('타입이 올바르지 않습니다!')
In [33]:
func1()
타입이 올바르지 않습니다!
In [34]:
def func1():
func2()
def func2():
func3()
def func3():
try:
print('%d' % '문자열 출력')
except TypeError:
print('타입이 올바르지 않습니다!')
func1()
타입이 올바르지 않습니다!
In [35]:
def func1():
try:
func2()
except TypeError:
print('타입이 올바르지 않습니다!')
def func2():
func3()
def func3():
print('%d' % '문자열 출력')
func1()
타입이 올바르지 않습니다!
728x90
반응형
'파이썬 기초' 카테고리의 다른 글
(파이썬) 클로저와 데코레이터 (0) | 2023.03.13 |
---|---|
(파이썬) 파일 입출력 (0) | 2023.03.13 |
(파이썬) 모듈 (0) | 2023.03.10 |
(파이썬) 스페셜 메소드 (0) | 2023.03.10 |
(파이썬) 상속 (0) | 2023.03.10 |
Comments