Cute Running Puppy

Python

Python_18Day

jwjin 2019. 3. 11. 21:53
728x90

# 예외(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을 안써줬으므로 계속 반복이 됩니다. 문제 완료.









728x90

'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