# 예외(exception) , 에러(errror)
에러란 문제 해결 전까지 실행 불가인 상황을 말합니다. 예외는 정상 실행과 이상 실행이 공존하는 경우를 말합니다.
예시를 들어보겠습니다. 바나나 개수와 사람수를 입력받아 한사람당 줄 수 있는 바나나 수와 남는 바나나 수를 구해보겠습니다.
# - 이상 진행(ValueError) - 입력값이 정수가 아닌 경우
# - 이상 진행(ZeroDivisionError) - 사람이 0명인 경우
banana = int(input('바나나 개수 : '))
person = int(input('인원수 : '))
result = banana // person
etc = banana % person
print(f'한사람당 {result}개의 바나나를 먹을 수 있고 , {etc}개의 바나나가 남습니다')
바나나수와 사람수를 입력받고 한사람당 받을 수 있는 개수와 남는 개수를 구하는 식을 쓰고 결과를 도출합니다.
이때 입력할 때 에러의 종류가 2가지가 나타날 수 있는데 한개는 사용자가 입력한 값이 정수가 아닌 경우와 사람을 0 명으로 썼을 때, 2가지로 나
뉩니다. 각각 에러 이름을 ValueError , ZeroDivisionError 이라고 합니다.
다음은 예외 처리 구문 입니다. 위의 2가지 에러가 발생했을때
.........
banana = int(input('바나나 개수 : '))
ValueError: invalid literal for int() with base 10: 'fda'
이런 에러가 뜨면서 실행이 끝나게 됩니다.
하지만 예외 처리 구문을 쓰게 되면 에러가 발생했을 때 이런 에러가 뜨지 않고 자기가 원하는 형식으로 출력할 수 있게됩니다.
try :
banana = int(input('바나나 개수 : '))
person = int(input('인원수 : '))
result = banana // person
etc = banana % person
print(f'한사람당 {result}개의 바나나를 먹을 수 있고 , {etc}개의 바나나가 남습니다')
except:
print('프로그램 오류 발 생')
먼저 try라는 구문을 쓰게 되는데 쉽게 말하면 감시 구역을 저장해 놓는것으로 볼 수 있습니다.
그리고 나서 에러가 발생 했을 시 문제를 처리를 해야하는데 그러기 위해선 처리 구역을 만들어야 합니다.
except라는 구문을 쓰고 에러가 발생했을때 어떤 형식으로 출력할지 정할 수 있습니다. 만약 위처럼 저 문장을 뜨게 하면?
바나나 개수 : asdfc
프로그램 오류 발 생
에러가 발생했을 때 이런 문구가 뜨게 됩니다.
이때 예외처리를 세분화 시킬 수 있습니다.
except ValueError :
print('문자를 입력할 수 없습니다..')
except ZeroDivisionError:
print('사람은 0명일 수 없습니다')
저 위의 구문에서 이런 형식으로 처리구역을 만들면 더 세분화가 됩니다. 위의 2가지의 뜻은
만약 사용자가 정수 대신 문자를 입력하면 문자를 입력할 수 없다 뜨게 했고 사람수를 0명이라 입력하면 0명을 적을 수 없다 뜨게 한게 저 뜻입니다.
'''
사용자에게 출생년도 4자리를 입력받아 유효한지 검사
숫자가 아닌 다른 값을 입력한다면 오류메시지 출력
'올바른 숫자를 입력하세요'
제대로 입력할때까지 반복하여 수행
'''
while True :
try:
birth = int(input('출생년도 4자리를 입력하세요 : '))
break
except ValueError:
print('올바른 숫자를 입력하세요')
print('입력이 완료되었습니다')
문제입니다. 출생년도를 입력했을때 제대로 된 형식으로 입력했으면 입력완료 , 다른 형식으로 입력했으면 제대로 입력할때까지 반복하라는 문제입
니다. 우선 다른 형식으로 입력했을때 계속 반복이 되어야 하기 때문에 반복문을 써줍니다. 그리고 나서 감시 구역을 저장하고
출생년도 입력구문을 씁니다. 이때 제대로 입력했으면 break 을 써줍니다.
만약 올바르지 않게 썼다면 break을 안써줬으므로 계속 반복이 됩니다. 문제 완료.
'Python' 카테고리의 다른 글
| Python_19Day (0) | 2019.03.12 |
|---|---|
| Python_17Day (0) | 2019.03.08 |
| Python_16Day (0) | 2019.03.07 |
| Python_15Day (0) | 2019.03.06 |
| Python_14Day (0) | 2019.03.05 |