본문 바로가기
프로그래밍/Python

[Python] 입력값이 잘못됐을 때 코드를 다시 실행해보자

by rahites 2022. 1. 9.

 

기초 파이썬 멘토링을 진행하던 도중 멘티 한분의 질문이 있었다.

 

그 질문은 "주어진 문제에서 입력값을 input()으로 받아줄 때 원하는 범위의 값을 입력받지 못하는 경우 다시 코드를 실행할 수 있나요?" 였다.

 

물론 가능하다. 하지만 보통 백준을 풀거나 과제를 진행할 경우 해당 조건에 맞는 값이 입력되기 때문에 가능하다고만 생각해보았지 직접 코드를 짜본적은 없었던 것 같다. 

 

그래서 이번 기회에 한번 구글링도 해보고 코드를 짜보는 시간을 가졌다.

 

< 조건 >

- 시간과 분을 받는 코드를 만들어보자! 시간은 0 <= H <= 23, 분은 0 <= M <= 59 로 가정한다.

 

1. 파이썬의 내장 클래스인 Exception을 상속받아 사용자 지정 오류 class를 만들어준다.

2. 만든 사용자 지정 오류를 호출하는 함수를 만들어줍니다.

# 사용자 임의로 error만들기
class my_error(Exception): # 임의로 설정해줄 error를 생성합니다. ( 0 이상 23이하가 나오지 않을 때 호출할 예정!)
    # 파이썬 내장 클래스인 Exception 클래스를 상속
    pass # 문법상 사용

def hour_error(x):
    if x>23 or x<0:   # 입력받은 값이 0 ~ 23이 아닐 경우
        raise my_error # 위에서 만들어준 my_error를 호출해줍니다.
        
def minute_error(x):
    if x>59 or x<0:   # 입력받은 값이 0 ~ 59가 아닐 경우
        raise my_error # 위에서 만들어준 my_error를 호출해 줍니다.

 

3. while과 try-except구문을 활용해 조건에 해당하는 오류가 발생했을 시 위에서 만든 my_error를 호출해주고 올바른 입력값을 입력받을 때까지 반복해서 코드를 실행해준다.

while True: # 조건문이 True이기 때문에 break를 통해 반복을 종료시키기 전까지 무한히 반복해줍니다.
    try:  # 시도해봅니다
        H = hour_error(int(input("일어나려는 시를 입력해주세요 : ")))
        break
    except my_error:  # 시도했는데 해당 오류가 나왔을 경우!! -> 실행문을 실행하고 다시 try로 
        print("시간은 0 ~ 23 사이의 숫자값으로 입력해주세요.")
    except ValueError: # 문자로 입력받았을 경우 -> 실행문을 실행하고 다시 try로 
        print("시간은 숫자로 입력해주세요.")
        
while True:
    try:  # 시도해봅니다
        M = minute_error(int(input("일어나려는 분을 입력해주세요 : ")))
        break
    except my_error:  # 시도했는데 해당 오류가 나왔을 경우!! -> 실행문을 실행하고 다시 try로 
        print("분은 0 ~ 59 사이의 숫자값으로 입력해주세요.")
    except ValueError: # 문자로 입력받았을 경우 -> 실행문을 실행하고 다시 try로 
        print("분은 숫자로 입력해주세요.")

열심히 짰지만 class나 def, try - except구문에 대한 설명까지 하는건 무리라는 생각이 들었다..!

( 조금더 효율적으로 코드를 짤 수 있을 것 같기도 하고.. 흠.. )

 

그래서 설명하기 좀 편하게 while과 if만 사용해서 다시 짜보았다.

while True:
    H = int(input('H:'))
    M = int(input('M:'))
    if H >= 0 and H <= 23 and M >= 0 and M <= 59: # 이 조건을 만족할 때에만 
        print("입력받은 시간은", H, "시",M,"분")
        break

멋은없어도 코드를 짜는 목적인 "원하는 값을 입력받지 못할 때 코드를 다시 실행해라!"라는 조건을 잘 수행하는 코드라고 생각한다 ㅎㅎ

 

'프로그래밍 > Python' 카테고리의 다른 글

[Python] 웹 크롤링 ( Web Crawling )  (0) 2022.04.03
[Python] WordCloud  (0) 2022.04.03
[Python] Pandas의 Series와 DataFrame  (0) 2021.07.14

댓글