[Python] 오류 처리

형이·2023년 11월 8일

Python

목록 보기
20/34
post-thumbnail

📝 오류 처리

🖥️ 1. 오류 처리

  • 오류가 발생되었을 때 별도의 처리를 하거나 무시하고 프로그램을 실행하는 것
  • 오류가 발생될 것으로 예상되는 문장을 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을 입력하면 입력을 멈추고, 정렬을 시작함)

  • 데이터를 입력하세요 : abc
  • 데이터를 입력하세요 : 123
  • 데이터를 입력하세요 : 1
  • 데이터를 입력하세요 : bbb
  • 데이터를 입력하세요 : 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'

0개의 댓글