- 오류가 발생되었을 때 별도의 처리를 하거나 무시하고 프로그램을 실행하는 것
- 오류가 발생될 것으로 예상되는 문장을 try 블록에 코딩하고, try 블록에 코딩된 내용을 실행하다가 오류가 발생하면 더이상 try 블록의 내용을 실행하지 않고, 해당 오류의 exception 블록에 코딩된 내용을 실행
- 파이썬은 발생할 수 있는 모든 문제를 예외 클래스로 만들어 놓음
- 모든 예외 클래스는 BaseException 클래스의 자식 클래스이며, BaseException 클래스의 자식 클래스 중 Exception 클래스는 모든 예외 클래스의 부모 클래스가 됨
try : 오류가 발생될 것으로 예상되는 문장 ... ... exception 오류 클래스명1 : 해당 오류가 발생하면 실행할 문장 ... exception 오류 클래스명2 : 해당 오류가 발생하면 실행할 문장 ... else : 오류가 없을 경우 실행할 문장 ... # 옵션 finally : 오류 발생 여부와 상관없이 무조건 실행할 문장 # 옵션
try:
print(10/2)
print(5/0) # ZeroDivisionError: division by zero
print(4/2)
except ZeroDivisionError:
print('0으로 나눌 수 없습니다.')
print('정상종료')
[결과]
5.0
0으로 나눌 수 없습니다.
정상종료
try:
data = [10, 20, 30]
print(data[0])
print(data[3]) # IndexError: list index out of range
print(data[1])
except IndexError:
print('오류가 발생했습니다.')
print('정상종료')
[결과]
10
오류가 발생했습니다.
정상종료
try:
data = [10, 20, 30]
print(data[0])
print(data[3])
print(data[1])
# except ZeroDivisionError: # 오류처리 순서가 잘못됨
# print('오류가 발생했습니다.')
except IndexError:
print('Index 오류가 발생했습니다.')
except :
print('알 수 없는 오류가 발생했습니다.')
print('정상종료')
[결과]
10
Index 오류가 발생했습니다.
정상종료
dat = [10, 20, 30]
str = '파이썬 예외처리'
try:
# print(4/0)
print(10/2)
# print(data[5])
print('%d' % str)
except ZeroDivisionError:
print('0으로 나눌 수 없습니다.')
except IndexError:
print('Index 지정이 올바르지 않습니다.')
except :
print('모든 오류')
else :
print('정상적인 프로그램 진행')
finally :
print('오류에 관계없이 무조건 실행되는 문장')
print('정상종료')
[결과]
5.0
모든 오류
오류에 관계없이 무조건 실행되는 문장
정상종료
숫자와 문자를 섞어서 입력하면 숫자 + 문자형식의 오름차순으로 정렬하여 출력하는 프로그램을 작성해보자. (단, 000을 입력하면 입력을 멈추고, 정렬을 시작함)
=> 결과 : [1, 123, 'abc', 'bbb']
num = []
str = []
while True :
data = input('데이터를 입력하세요 : ')
if data == '000' :
break
try:
num.append(int(data))
except:
str.append(data)
num.sort()
str.sort()
print(num + str)
[결과]
데이터를 입력하세요 : abc
데이터를 입력하세요 : 1
데이터를 입력하세요 : bbb
데이터를 입력하세요 : 123
데이터를 입력하세요 : 000
[1, 123, 'abc', 'bbb']
📌 sort는 타입이 동일해야되기 때문에!
data = ['11', '1', '111', '50', '1234']
data.sort() # 아스키코드를 기준으로 정렬
print(data)
[결과]
['1', '11', '111', '1234', '50']
data = [11, 1, 111, 50, 1234]
data.sort()
print(data)
data.sort(reverse=True)
print(data)
[결과]
[1, 11, 50, 111, 1234]
[1234, 111, 50, 11, 1]
data = ['11', 1, '111', 50, '1234']
data.sort()
[결과]
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-24-1536dc4c13d8> in <cell line: 2>()
1 data = ['11', 1, '111', 50, '1234']
----> 2 data.sort()
TypeError: '<' not supported between instances of 'int' and 'str'